Передать аргументы командной строки в Windows «Открыть с помощью»


28

У меня есть программа, которая открывается с определенным ярлыком, но ярлык, кажется, отправляет параметры в приложение. Если я иду прямо в целевой каталог и дважды щелкаю, это не работает. Однако, если я использую командную строку и передам определенный аргумент, приложение откроется правильно.

Я хочу открыть определенные типы файлов с помощью приложения, но приложение должно иметь параметры, иначе оно не будет работать. Можно ли сделать что-то подобное?


Какую версию Windows вы используете?
iglvzx

Я использую Windows 7.
Jtpereyda

1
Это имеет лучшие решения: superuser.com/questions/136133/…

Ответы:


20

Я столкнулся с той же проблемой, что и @jtpereyda, и решение @bobbymcr у меня тоже не сработало. Я пытался получить все параметры командной строки, передаваемые в сценарии node.js, без необходимости использовать файл node.exe в команде.

Проблема в том, что если вы уже связали программу с расширением через Open Withдиалоговое окно, то вы создадите ассоциацию приложений, а не ассоциацию расширений файлов, между ними. И ассоциации приложений имеют приоритет.

Если вы не возражаете против редактирования реестра, вы можете изменить (Default)ключ по следующему пути:

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

Вам следует заменить node.exeприложение, которое вы настраиваете.

Или вы можете просто удалить папку приложения из HKEY_CLASSES_ROOT\Applicationsпапки, и ваша ftypeассоциация начнет работать.

Обязательно используйте, %*который будет передавать оставшиеся неопределенные аргументы командной строки или вообще ничего. Если вы это сделаете, "%2" "%3" "%4" "%5"вы получите 5 пустых строковых параметров, переданных в ваше приложение, если вы не укажете аргументы командной строки.

Наконец, если вы не согласны с изменением реестра вручную, вы можете использовать бесплатный инструмент от Nirsoft - FileTypesManager - http://www.nirsoft.net/utils/file_types_manager.html

Файловые ассоциации появятся вверху списка, без текста в первом столбце расширения. Просто найдите имя исполняемого файла в списке и выберите его, чтобы изменить command lineполе для имени openдействия.

На windows7 изменения отразились сразу же без перезагрузки или перезапуска приложения. Однако утилита Nirsoft имеет функцию «Обновить рабочий стол» при любой модификации, поэтому я полагаю, что, возможно, Vista или более ранние версии ОС будут кэшировать данные. В этом случае утилита будет лучше, в противном случае вам может потребоваться выйти из системы и войти, чтобы увидеть изменения.


1
как примечание: кажется, что% 1 всегда должен использоваться для передачи ассоциированного файла в программу. прямое использование% * не работает. По крайней мере, у меня
возникли

1
Я заставил его работать методом проб и ошибок, в результате чего получилось следующее значение данных: "C:\Program Files\nodejs\node.exe" "%1"%*ПРИМЕЧАНИЕ: %*значение НЕ в кавычках, и между ним и предыдущей двойной кавычкой нет пробела.
Майкл Паукулонис

Я также удалил ключ HKEY_CLASSES_ROOT\.ulawв regedit на тот случай, если .ulawэто расширение файлов, для которых я делал процедуру.
Мэтт

Как мы можем передать аргументы (скажем, «тестирование») при открытии?
Apparao

Пожалуйста, измените этот ответ, чтобы явно изменить «[HKLM | HKCU] \ Software \ Classes», в зависимости от контекста установки. Не изменяйте HKCR напрямую. Смотрите "важные соображения" для типов файлов и HKEY_CLASSES_ROOTстатьи. Это понятное недоразумение, учитывая, что большая часть собственной документации Microsoft предшествует объединенному представлению для HKCR, которое было представлено около Windows 2000.
Eryk Sun

10

Вы можете сделать это с помощью assocи ftypeв командной строке. Откройте командную строку с повышенными правами и попробуйте следующее:

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

Это свяжет .xyzрасширение MyProgram.exeи передаст командную строку /arg1 /arg2 [filename.xyz]программе для его запуска.


1
Принято, потому что это, кажется, правильный ответ из того, что я исследовал. Однако этот процесс кажется неэффективным в системе, которую я использую. Я могу использовать ftype и assoc, чтобы убедиться, что изменения прошли, но это не влияет на программу, используемую для открытия файлов. Может быть, процесс изменился в Windows 7?
Jtpereyda

Используя ответ Маркуса Поупа, сделайте так, чтобы он работал корректно на моей стороне с помощью Windows 7. Пытался воспроизвести .ulawфайл, soxиспользуя предопределенные аргументы из него. Обратите внимание, что в дополнение к удалению старого приложения я также удалил, HKEY_CLASSES_ROOT\.ulawкоторый определял тип файла.
Мэтт

CMD assocи ftypeявляются устаревшими командами. Они не были обновлены для расширений ассоциаций файлов, добавленных в Windows XP, 7 и 8. Они изменяют только ассоциации файлов и ключи ProgId под системным ключом «HKLM \ Software \ Classes». Они не читают и не изменяют настройки HKCU для каждого пользователя, которые имеют приоритет, или более новые подразделы, такие как «Applications» и «SystemFileAssociations», или ключи возможностей для каждого приложения из «RegisteredApplications». Они также не читают и не изменяют выбор пользователя в разделе «HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts».
Eryk Sun

3

Человек, который задает вопрос, сообщает, что лучший ответ на самом деле не работает.

Я понял это для XP, которая может применяться к более поздним ОС.

В командной строке cmd вам нужны две команды: assoc, ftype.

Эти два могут показать, что связано, и затем отредактировать ассоциацию, но есть поворот, инструкции MS кажутся неправильными / неполными. Я был предупрежден об этом, заметив недокументированный стиль ассоциации со стороны известных ветеранских приложений. Почему?

Этот пример позволяет передавать много аргументов ассоциированной программе.

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

Это не опечатка "%1" "%*". Звезда процента не будет работать без предшествующего процента 1 .

И это сразу же начинает действовать, не требуется выходить из системы и т. Д.

Сделано правильно, пройдет 3 к arg []

myfile.wotsit file1 file2 file3

Не сделали этого, но похоже, что следующие внешние кавычки передают -m, если программе нужен флаг.

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

Я не думаю, что это правильно. Использование кавычек вокруг "% *" приведет к тому, что список аргументов будет передан как один аргумент. Кроме того, вы пропустили двоеточие после буквы диска. Правильная команда должна быть: ftype name_of_assoc = "C: \ blah \ aprog.exe" -m "% 1"% *
User0

Я использую отличную программу FilesTypeMan, и в этом случае вам нужно %1 %* без кавычек !!! проклятые окна
Жан-Франсуа Фабр

2

У меня была похожая проблема со старой версией PSP с Windows7

Это решение (смена оболочки \ open \ командной строки в реестре) сработало, НО должен был иметь синтаксис "C: \ MyFolderName \ PSP.EXE"% 1 NO QUOTES AROUND% 1, иначе это интерпретируется как константа


1
почему негативы? этот ответ помог мне, наконец, получить команду правильно!
ylka

СПАСИБО - у меня были цитаты, и они не работали
Фиона - myaccessible.website

1

Не лучшее решение, но самое простое - использовать командный файл.

Создайте подобный файл bat и установите в нем программу по умолчанию для вашего расширения файла. И да, нужна пустая цитата после запуска:

{имя приложения} .bat

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

Пример:

BCompareEdit.bat

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

1
Это единственное решение, которое работало для меня в Windows 10. Это помогает мне запускать Word 2013 с параметром / w, чтобы при каждом запуске иметь новый экземпляр, который необходим для использования Word с виртуальными рабочими столами.
vicmortelmans

0

Вот расширение, которое, кажется, делает именно то, что вы хотите. Я никогда не использовал его раньше, но, похоже, получил хорошие отзывы. оставить комментарий, если есть проблемы.


-1

Сделайте ярлык Windows и используйте следующий шаблон:

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

2
И как пользователь использует это, чтобы открыть такой файл, как xyz.jpg?
G-Man говорит: «Восстановите Монику»

Он спросил, как изменить реестр для достижения этой цели.
катится
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.