Передайте аргументи командного рядка в 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 завжди повинен використовуватися для передачі пов'язаного файлу програмі. безпосередньо використання% *, здається, не працює. Принаймні, у мене виникла проблема з моїм ".pl" - асоціацією Perl на мою перемогу 7
— vlad_tepesch

1
Я змусив його працювати за допомогою проб і помилок, в результаті чого виникає наступне значення даних: "C:\Program Files\nodejs\node.exe" "%1"%*ПРИМІТКА: %*значення НЕ в лапках і не має місця між ним та попередньою подвійною цитатою.
— Михайло Паулуконіс

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

Чи можемо ми передати аргументи (скажімо, "тестування") під час відкриття?
— Аппарао

Будь ласка, змініть цю відповідь, щоб експліцитно змінити "[HKLM | HKCU] \ Software \ Classes", залежно від контексту установки. Не змінюйте HKCR безпосередньо. Дивіться "важливі міркування" щодо типів файлів та HKEY_CLASSES_ROOTстатті. Це зрозуміле непорозуміння, зважаючи на те, що значна частина власної документації Microsoft передує об'єднаному погляду для HKCR, який був представлений близько Windows 2000.
— Eryk Вс

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 для кожного користувача, які мають перевагу, або новіші підрозділи, такі як "Програми" та "SystemFileAssociations", або ключі можливостей додатків з "Зареєстрованих додатків". Вони також не читають і не змінюють вибір користувача у розділі "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts".
— Ерик Нд

3

Особа, яка ставить запитання, повідомляє, що найкраща відповідь насправді не працює.

Я зрозумів це для XP, який може застосовуватися до пізнішої ОС.

У підказці cmd вам потрібно дві команди: assoc, ftype.

Ці два можуть показати, що пов'язано, а потім відредагувати асоціацію, але є поворот, інструкції MS здаються неправильними / неповними. Мене попередили про це, помітивши незадокументований стиль асоціації відомими ветеранськими програмами, чому?

Цей приклад дозволяє передавати багато аргументів до асоційованої програми.

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

Не помилка, яка є "%1" "%*". Без попереднього відсотка 1 зірка не працюватиме .

І це відбувається негайно, не потрібно виходити тощо.

Виконано право, буде передано 3 до аргументу []

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 НІКОЛИ НІКОЛИ НІКОЛИ НЕ ЦИТЕТ% 1, інакше це трактується як константа


1
чому низовини? ця відповідь допомогла мені нарешті правильно отримати команду!
— ілька

ДЯКУЙТЕ, - у мене були котирування, і це не працювало
— Fiona - 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.