1

я храню свои макросы doskey в отдельном файле с расширением .macro и могу загрузить их с помощью doskey /macrofile=macros.macro для конкретной сессии консоли

я хочу использовать функцию Windows OS ассоциации типов файлов, чтобы загрузить их без необходимости вводить команду (имя исполняемого файла или путь) каждый раз

по этой причине я использую две встроенные команды cmd.exe :

assoc .macro=macro
ftype macro="doskey /macrofile=%1"

Там нет ошибки, но когда я выполняю файл, появляется всплывающее сообщение, и в основном это не работает

Ранее я пытался связать файлы .reg с reg import %1 и это работало, проблема здесь, кажется, в том, что знак равенства в doskey 's /macrofile= , я думаю, что система не может справиться с этим

я думаю, несмотря на переключатели (/) и подкоманды после имени исполняемого файла могут работать с параметрами, но = как-то не удается сделать это

поэтому я прошу решения :)

1 ответ1

2

ftype разбивает свой аргумент на «=» и не предоставляет средств для экранирования второго символа «=» в команде. К счастью, эта команда просто добавляет простой параметр реестра, который вы можете добавить вручную, используя reg в командной строке с повышенными правами:

assoc .macro=macrofile
set k=HKLM\Software\Classes\macrofile\shell\open\command
set d="\"%SystemRoot%\system32\doskey.exe\" /macrofile=\"%1\""
reg add %k% /f /ve /d %d%

Или создайте файл .reg, который можно импортировать с помощью regedit или reg:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Classes\.macro]
@="macrofile"

[HKEY_LOCAL_MACHINE\Software\Classes\macrofile]

[HKEY_LOCAL_MACHINE\Software\Classes\macrofile\shell]

[HKEY_LOCAL_MACHINE\Software\Classes\macrofile\shell\open]

[HKEY_LOCAL_MACHINE\Software\Classes\macrofile\shell\open\command]
@="\"C:\\Windows\\system32\\doskey.exe\" /macrofile=\"%1\""

Пример:

C:\>assoc .macro
.macro=macrofile
C:\>ftype macrofile
macrofile="C:\Windows\system32\doskey.exe" /macrofile="%1"

C:\>doskey /macros:all
[cmd.exe]

C:\>spam.macro
C:\>doskey /macros:all
[cmd.exe]
    spam=echo spam!

C:\>spam
spam!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .