Passa gli argomenti della riga di comando a Windows "Apri con"


28

Ho un programma che si apre con un collegamento specifico, ma il collegamento sembra inviare parametri all'applicazione. Se vado direttamente alla directory di destinazione e faccio doppio clic, non funziona. Tuttavia, se utilizzo la riga di comando e passo un certo argomento, l'applicazione si apre correttamente.

Voglio aprire determinati tipi di file usando l'applicazione, ma l'applicazione deve avere i parametri, altrimenti non funzionerà. È possibile fare questo genere di cose?


Quale versione di Windows stai usando?
— iglvzx,

Sto usando Windows 7.
— jtpereyda,

1
Questo ha soluzioni migliori: superuser.com/questions/136133/…

Risposte:


20

Ho riscontrato lo stesso problema di @jtpereyda e la soluzione di @bobbymcr non ha funzionato neanche per me. Stavo cercando di ottenere tutti i parametri della riga di comando passati negli script node.js senza bisogno di node.exe sul comando.

Il problema è che se hai già associato il programma con l'estensione tramite la Open Withfinestra di dialogo, avrai creato un'associazione di applicazione, anziché un'associazione di estensione di file, tra i due. E le associazioni di applicazioni hanno la precedenza.

Se non ti dispiace modificare il registro, puoi modificare la (Default)chiave nel seguente percorso:

HKEY_CLASSES_ROOT\Applications\node.exe\shell\open\command

È necessario sostituire node.execon l'applicazione che si sta regolando.

Oppure puoi semplicemente eliminare completamente la cartella dell'applicazione dalla HKEY_CLASSES_ROOT\Applicationscartella e la tua ftypeassociazione inizierà a funzionare.

Assicurati di usare %*quale passerà nei restanti argomenti della riga di comando non specificati o niente del tutto. Se lo fai "%2" "%3" "%4" "%5"otterrai 5 parametri stringa vuoti passati nella tua applicazione quando non specifichi alcun argomento della riga di comando.

Infine, se non si è d'accordo con la modifica manuale del registro, è possibile utilizzare uno strumento freeware di Nirsoft - FileTypesManager - http://www.nirsoft.net/utils/file_types_manager.html

Le associazioni di file verranno visualizzate nella parte superiore dell'elenco, senza alcun testo nella prima colonna di estensione. Trova il nome dell'eseguibile nell'elenco e selezionalo per modificare il command linecampo per il opennome dell'azione.

Su Windows 7 le modifiche sono state immediatamente riflesse senza alcun riavvio o riavvio dell'applicazione. Tuttavia l'utilità Nirsoft ha una funzione per "Aggiornare il desktop" su qualsiasi modifica, quindi mi porta a credere che forse Vista o versioni precedenti del sistema operativo memorizzerebbero i dati nella cache. Nel qual caso l'utilità sarebbe una scommessa migliore, altrimenti potrebbe essere necessario disconnettersi e accedere per vedere le modifiche.


1
come nota: sembra che% 1 debba sempre essere usato per passare il file associato al programma. l'utilizzo diretto di% * sembra non funzionare. Almeno ho avuto problemi con la mia ".pl" - associazione perl sulla mia vittoria 7
— vlad_tepesch,

1
Ho funzionato per tentativi ed errori, risultando nel seguente valore di dati: "C:\Program Files\nodejs\node.exe" "%1"%*NOTA: il %*valore NON è tra virgolette e non ha spazio tra esso e la doppia virgoletta precedente.
— Michael Paulukonis,

Ho anche eliminato la chiave HKEY_CLASSES_ROOT\.ulawin regedit nel caso in cui .ulawsia l'estensione dei file per cui stavo facendo la procedura.
— Matt

Possiamo passare gli argomenti (diciamo 'testing') durante l'apertura?
— Apparao,

Modifica questa risposta per modificare esplicitamente "[HKLM | HKCU] \ Software \ Classes", a seconda del contesto di installazione. Non modificare direttamente HKCR. Vedere le "considerazioni importanti" per i tipi di file e l' HKEY_CLASSES_ROOTarticolo. È un malinteso comprensibile dato che gran parte della documentazione di Microsoft precede la visione unita per HKCR che è stata introdotta su Windows 2000.
— Eryk Sun

10

Puoi farlo con assoce ftypeal prompt dei comandi. Aprire un prompt dei comandi con privilegi elevati e provare quanto segue:

ftype MyFileType = C: \ MyDir \ MyProgram.exe / arg1 / arg2 "% 1"
assoc .xyz = MyFileType

Ciò assocerà l' .xyzestensione MyProgram.exee passerà la riga di comando /arg1 /arg2 [filename.xyz]al programma per eseguirla.


1
Accettato perché questa sembra essere la risposta giusta da ciò che ho studiato. Tuttavia, questo processo sembra inefficace sul sistema che sto usando. Posso usare ftype e assoc per verificare che le modifiche siano state apportate, ma non influisce sul programma utilizzato per aprire i file. Forse il processo è cambiato in Windows 7?
— jtpereyda,

Usando la risposta di Marcus Pope, farlo funzionare correttamente dalla mia parte usando Windows 7. Stavo cercando di riprodurre un .ulawfile soxusando argomenti predefiniti. Si noti che oltre a eliminare la vecchia applicazione, ho anche eliminato HKEY_CLASSES_ROOT\.ulawquale stava definendo il tipo di file.
— Matt

CMD assoce ftypesono comandi legacy. Non sono stati aggiornati per le estensioni alle associazioni di file aggiunte in Windows XP, 7 e 8. Modificano solo le chiavi di associazione file e ProgId sotto la chiave di sistema "HKLM \ Software \ Classes". Non leggono né modificano le impostazioni HKCU per utente, che hanno la precedenza, o le sottochiavi più recenti come "Applicazioni" e "SystemFileAssociations" o le chiavi delle capacità per applicazione da "RegisteredApplications". Inoltre, non leggono o modificano la scelta dell'utente in "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts".
— Eryk Sun,

3

La persona che pone la domanda segnala che la migliore risposta in realtà non funziona.

L'ho capito per XP, che potrebbe applicarsi al sistema operativo successivo.

A un prompt cmd sono necessari due comandi: assoc, ftype.

Questi due possono mostrare ciò che è associato e quindi modificare l'associazione ma c'è una svolta, le istruzioni MS sembrano essere errate / incomplete. Sono stato avvisato di questo notando uno stile di associazione non documentato da note applicazioni veterane, perché?

Questo esempio consente di passare molti argomenti al programma associato.

ftype name_of_assoc="C\blah\aprog.exe" "%1" "%*"

Non è un errore di battitura "%1" "%*". La stella percentuale non funzionerà senza la precedente percentuale 1 .

E questo diventa immediatamente attivo, non è necessario disconnettersi ecc.

Fatto a destra passerà 3 a arg []

myfile.wotsit file1 file2 file3

Non l'ho fatto ma sembra che le seguenti virgolette esterne passerebbero -m se il programma necessita di un flag.

ftype name_of_assoc="C\blah\aprog.exe" -m "%1" "%*"

Non penso sia corretto. Usando le virgolette intorno a "% *", l'elenco degli argomenti verrà passato come singolo argomento. Inoltre, hai perso i due punti dopo la lettera di unità. Il comando corretto dovrebbe essere: ftype name_of_assoc = "C: \ blah \ aprog.exe" -m "% 1"% *
— Utente0

Sto usando l'eccellente programma FilesTypeMan, e in questo caso hai bisogno di %1 %* virgolette !!! dannata finestre
— Jean-François Fabre il

2

Ho avuto un problema simile con una versione precedente di PSP con Windows 7

Questa soluzione (cambia la shell \ open \ riga di comando nel Registro di sistema) ha funzionato MA doveva avere la sintassi "C: \ MyFolderName \ PSP.EXE"% 1 NESSUN PREVENTIVO CIRCA% 1 altrimenti questo viene interpretato come costante


1
perché i downvotes? questa risposta mi ha aiutato finalmente a ottenere il comando giusto!
— ylka,

GRAZIE - Avevo le virgolette e non funzionava
— Fiona - myaccessible.website

1

Non è la soluzione migliore ma la più semplice sta usando un file batch.

Crea un file bat come quello e imposta il programma predefinito su di esso per l'estensione del file. E sì, la citazione vuota dopo l'avvio è necessaria:

{nome app} .bat

    start "" "{app path}" %1 /edit

Esempio:

BCompareEdit.bat

    start "" "C:\Program Files\Beyond Compare 4\BCompare.exe" %1 /edit

1
Questa è l'unica soluzione che ha funzionato per me su Windows 10. Mi aiuta ad avviare Word 2013 con l'opzione / w per avere una nuova istanza ad ogni avvio, necessaria per usare Word con desktop virtuali.
— vicmortelmans,

0

Ecco un'estensione che sembra fare esattamente quello che vuoi. Non l'ho mai usato prima, ma sembra ottenere buone recensioni. lasciare un commento se ci sono problemi.


-1

Crea un collegamento di Windows e utilizza il seguente modello:

"C:\Windows\system32\mspaint.exe" "c:\data\basejpg.jpg" %1

2
E come lo usa l'utente per aprire un file come xyz.jpg?
— G-Man dice "Ripristina Monica" il

Ha chiesto come modificare il registro per raggiungere questo obiettivo.
— lancia il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.