Przekaż argumenty wiersza poleceń do systemu Windows „Otwórz za pomocą”

28

Mam program, który otwiera się z określonym skrótem, ale wydaje się, że skrót przesyła parametry do aplikacji. Jeśli przejdę bezpośrednio do katalogu docelowego i kliknę dwukrotnie, to nie zadziała. Jeśli jednak użyję wiersza polecenia i przekażę określony argument, aplikacja otworzy się poprawnie.

Chcę otworzyć niektóre typy plików za pomocą aplikacji, ale aplikacja musi mieć parametry, w przeciwnym razie nie będzie działać. Czy można to zrobić?

jtpereyda
źródło
Z jakiej wersji systemu Windows korzystasz?
iglvzx
Korzystam z systemu Windows 7.
jtpereyda
1
To ma lepsze rozwiązania: superuser.com/questions/136133/…

Odpowiedzi:

20

Natknąłem się na ten sam problem co @jtpereyda i rozwiązanie z @bobbymcr też nie działało dla mnie. Próbowałem przekazać wszystkie parametry wiersza polecenia do skryptów node.js bez potrzeby używania node.exe w poleceniu.

Problem polega na tym, że jeśli już skojarzyłeś program z rozszerzeniem za pośrednictwem Open Withokna dialogowego, utworzysz powiązanie aplikacji zamiast powiązania rozszerzenia pliku między nimi. A skojarzenia aplikacji mają pierwszeństwo.

Jeśli nie masz nic przeciwko edycji rejestru, możesz zmodyfikować (Default)klucz w następującej ścieżce:

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

Należy zastąpić node.exedostosowywaną aplikacją.

Lub możesz po prostu HKEY_CLASSES_ROOT\Applicationscałkowicie usunąć folder aplikacji z folderu, a twoje ftypestowarzyszenie zacznie działać.

Pamiętaj, aby użyć parametru, %*który przekaże pozostałe nieokreślone argumenty wiersza poleceń lub w ogóle nic. Jeśli to zrobisz "%2" "%3" "%4" "%5", otrzymasz 5 pustych parametrów ciągu przekazywanych do aplikacji, gdy nie podasz żadnych argumentów wiersza poleceń.

Wreszcie, jeśli nie jesteś w porządku ręcznie modyfikować rejestr, możesz użyć darmowego narzędzia Nirsoft - FileTypesManager - http://www.nirsoft.net/utils/file_types_manager.html

Powiązania plików pojawią się na górze listy, bez tekstu w pierwszej kolumnie rozszerzenia. Po prostu znajdź nazwę pliku wykonywalnego na liście i wybierz ją, aby zmodyfikować command linepole dla opennazwy akcji.

W Windows7 zmiany zostały odzwierciedlone natychmiast, bez ponownego uruchamiania lub ponownego uruchamiania aplikacji. Jednak narzędzie Nirsoft ma funkcję „Odśwież pulpit” przy każdej modyfikacji, więc wierzę, że może Vista lub wcześniejsze wersje OS buforowałyby dane. W takim przypadku narzędzie byłoby lepszym rozwiązaniem, w przeciwnym razie może być konieczne wylogowanie się i zalogowanie, aby zobaczyć zmiany.

Marcus Pope
źródło
1
jako uwaga: wydaje się, że% 1 zawsze powinno być użyte do przekazania powiązanego pliku do programu. bezpośrednie użycie% * wydaje się nie działać. Przynajmniej mam problem z moim stowarzyszeniem „.pl” - perl na mojej wygranej 7
vlad_tepesch
1
Mam go do pracy metodą prób i błędów, w wyniku czego następująca wartość danych: "C:\Program Files\nodejs\node.exe" "%1"%*UWAGA: %*wartość NIE jest w cudzysłowach i nie ma spacji między nią a poprzednim podwójnym cudzysłowem.
Michael Paulukonis,
Usunąłem również klucz HKEY_CLASSES_ROOT\.ulaww regedit na wypadek, gdyby .ulawrozszerzenie plików, dla których robiłem procedurę.
Matt
Ho możemy przekazać argumenty (powiedzmy „testowanie”) podczas otwierania?
Apparao
Zmień tę odpowiedź, aby wyraźnie zmodyfikować „[HKLM | HKCU] \ Software \ Classes”, w zależności od kontekstu instalacji. Nie modyfikuj bezpośrednio HKCR. Zobacz „ważne uwagi” dotyczące typów plików i HKEY_CLASSES_ROOTartykułu. Jest to zrozumiałe nieporozumienie, biorąc pod uwagę, że duża część własnej dokumentacji Microsoftu poprzedza scalony widok HKCR, który został wprowadzony około Windows 2000.
Eryk Sun
10

Możesz to zrobić za pomocą associ ftypew wierszu polecenia. Otwórz wiersz polecenia z podwyższonym poziomem uprawnień i spróbuj wykonać następujące czynności:

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

Spowoduje to powiązanie .xyzrozszerzenia MyProgram.exei przekazanie wiersza polecenia /arg1 /arg2 [filename.xyz]do programu, aby go uruchomić.

Bobbymcr
źródło
1
Zaakceptowano, ponieważ wydaje się to odpowiednia odpowiedź z tego, co zbadałem. Jednak ten proces wydaje się nieskuteczny w systemie, którego używam. Mogę użyć ftype i assoc, aby sprawdzić, czy zmiany przeszły, ale nie wpływa to na program używany do otwierania plików. Może proces zmienił się w systemie Windows 7?
jtpereyda
Użycie odpowiedzi Marcusa Pope'a sprawiło, że działało ono poprawnie po mojej stronie w systemie Windows 7. Próbowałem odtworzyć .ulawplik przy soxużyciu predefiniowanych argumentów. Zauważ, że oprócz usunięcia starej aplikacji usunąłem również, HKEY_CLASSES_ROOT\.ulawktóry definiował typ pliku.
Matt
CMD associ ftypesą starszymi poleceniami. Nie zostały zaktualizowane w celu rozszerzenia rozszerzeń skojarzeń plików dodanych w Windows XP, 7 i 8. Zmieniają tylko powiązanie plików i klucze ProgId pod kluczem systemowym „HKLM \ Software \ Classes”. Nie odczytują ani nie modyfikują ustawień HKCU dla poszczególnych użytkowników, które mają pierwszeństwo, ani nowszych podkluczy, takich jak „Aplikacje” i „SystemFileAssociations”, ani kluczy funkcji dla poszczególnych aplikacji z „Zarejestrowanych aplikacji”. Nie czytają też ani nie modyfikują wyboru użytkownika pod „HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts”.
Eryk Sun
3

Osoba zadająca pytanie zgłasza, że ​​najlepsza odpowiedź nie działa.

Wymyśliłem to dla XP, które mogą dotyczyć późniejszego systemu operacyjnego.

Po poleceniu cmd potrzebujesz dwóch poleceń: assoc, ftype.

Te dwa mogą pokazać, co jest powiązane, a następnie edytować powiązanie, ale jest pewien zwrot, instrukcje MS wydają się być nieprawidłowe / niekompletne. Zostałem o tym powiadomiony, zauważając nieudokumentowany styl skojarzenia przez znane weterani, dlaczego?

Ten przykład umożliwia przekazanie wielu argumentów do programu stowarzyszonego.

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

To nie jest literówka "%1" "%*". Gwiazda procentowa nie będzie działać bez poprzedzającego procentu 1 .

I to działa natychmiast, bez konieczności wylogowania itp.

Zrobione w prawo przejdzie 3 do arg []

myfile.wotsit file1 file2 file3

Nie zrobiłem tego, ale wygląda na to, że poniższe cytaty zewnętrzne przejdą -m, jeśli program potrzebuje flagi.

ftype name_of_assoc="C\blah\aprog.exe" -m "%1" "%*"
Tim Channon
źródło
Nie sądzę, żeby to było poprawne. Użycie cudzysłowów wokół „% *” spowoduje, że lista argumentów zostanie przekazana jako pojedynczy argument. Brakowało Ci dwukropka po literze dysku. Prawidłowe polecenie powinno brzmieć: ftype name_of_assoc = "C: \ blah \ aprog.exe" -m "% 1"% *
Użytkownik0
Korzystam z doskonałego programu FilesTypeMan, aw tym przypadku potrzebujesz %1 %* bez cudzysłowów !!! cholerne okna
Jean-François Fabre
2

Miałem podobny problem ze starszą wersją PSP z Windows7

To rozwiązanie (zmiana wiersza polecenia shell \ open \ w Rejestrze) działało, ALE musiało mieć składnię „C: \ MyFolderName \ PSP.EXE”% 1 NO QUOTES AROUND% 1, w przeciwnym razie interpretuje się to jako stałą

Denis
źródło
1
dlaczego opinie negatywne? ta odpowiedź pomogła mi w końcu poprawnie wykonać polecenie!
ylka
DZIĘKUJĘ - miałem cytaty i to nie działało
Fiona - myaccessible.website
1

Nie najlepszym rozwiązaniem, ale najłatwiejszym jest użycie pliku wsadowego.

Utwórz taki plik nietoperza i ustaw dla niego domyślny program dla rozszerzenia pliku. I tak, pusty cytat po uruchomieniu jest konieczny:

{nazwa aplikacji} .bat

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

Przykład:

BCompareEdit.bat

    start "" "C:\Program Files\Beyond Compare 4\BCompare.exe" %1 /edit
Xtro
źródło
1
Jest to jedyne rozwiązanie, które działało dla mnie w systemie Windows 10. Pomaga mi uruchomić program Word 2013 z opcją / w, aby mieć nowe wystąpienie przy każdym uruchomieniu, które jest potrzebne do używania programu Word z pulpitami wirtualnymi.
vicmortelmans
0

Oto rozszerzenie, które wydaje się robić dokładnie to, co chcesz. Nigdy wcześniej go nie używałem, ale wydaje się, że dostaje dobre recenzje. zostaw komentarz, jeśli występują problemy.

soandos
źródło
-1

Utwórz skrót do systemu Windows i użyj następującego szablonu:

"C:\Windows\system32\mspaint.exe" "c:\data\basejpg.jpg" %1
użytkownik835699
źródło
2
I w jaki sposób użytkownik korzysta z tego, aby otworzyć plik taki jak xyz.jpg?
G-Man mówi „Przywróć Monikę”
Zapytał, jak zmienić rejestr, aby to osiągnąć.
rzuca