Передайте аргументи командного рядка в 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.