Добавление ключа реестра в окнах с кавычками, необходимыми в данных, с помощью пакетного скрипта

Маленький Уиллис здесь. Я пытаюсь использовать пакетный скрипт для редактирования существующего раздела реестра, который используется при двойном щелчке файла .jar. Проблема в том, что данные, которые я пытаюсь ввести, содержат кавычки, но мне также нужны кавычки, чтобы они считались строкой.

Пример:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* /f

Когда я запускаю это в пакетном сценарии, окно cmd распечатывает «Ошибка: слишком много параметров командной строки».

Итак, чтобы сделать это просто. Я хочу добавить раздел реестра с "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* в качестве данных, включая цитаты и %1 и %* точно так же, как они не преобразуется в какой-либо фактический оператор или строку.

РЕДАКТИРОВАТЬ:

Реестр обычно добавляется с помощью этой строки командной строки:

ftype jarfile="C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*  

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


person Trey    schedule 05.03.2012    source источник


Ответы (4)


Используйте обратную косую черту, чтобы избежать внутренних кавычек, т.е.:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"C:\Program Files\Java\jre7\bin\javaw.exe\" -jar \"%1\" %*" /f
person Marc    schedule 05.03.2012
comment
Вы ответили примерно на половину моего вопроса. Вывод того, что вы мне дали, был C:\Program Files\Java\jre7\bin\javaw.exe -jar /f вместо C:\Program Files\Java\jre7\bin\javaw.exe -jar %1 %* - person Trey; 05.03.2012
comment
Хорошо. Я поставил кавычки перед /f, поэтому теперь он не спрашивает меня, хочу ли я переопределить существующий раздел реестра, но вывод остается относительно таким же. C:\Program Files\Java\jre7\bin\javaw.exe -jar %1 превращается только в %*, а %* не появляется. - person Trey; 05.03.2012
comment
Не уверен, почему это не работает. В качестве альтернативы вы можете экспортировать нужный раздел реестра с помощью контекстного меню regedit.exe, а затем использовать reg restore в пакетном файле для восстановления ключа. Это избавит вас от некоторых проблем. Изучение экспортированного файла также даст вам представление о том, как его отформатировать для reg add. - person Marc; 05.03.2012

Процентные литералы должны быть удвоены в пакетном файле: \"%%1\" %%*"

person dbenham    schedule 05.03.2012
comment
БОЛЬШОЕ СПАСИБО! Работает сейчас на 100%. - person Trey; 05.03.2012
comment
Хороший звонок, дбенхам. Запуск из командной строки по сравнению с пакетным файлом объясняет процентные проблемы. - person Marc; 06.03.2012

в дополнение к ответу dbenham вы должны использовать обратную косую черту и кавычки для пути к местоположению !!
(я имею в виду, что вы должны использовать "\"C:\Program Files..... вместо "C:\Program Files..... )

так что это окончательный ответ для типичной проблемы с добавлением знака процента &:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"C:\Program Files\Java\jre7\bin\javaw.exe\" -jar \"%%1\"" /f

спасибо дбенхам!

person selnomeria    schedule 15.10.2013

Другой альтернативой является использование одинарных кавычек, некоторые приложения могут правильно их прочитать, например:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "'C:\Program Files\Java\jre7\bin\javaw.exe\' -jar '%1' %*" /f
person AllGamer    schedule 08.02.2015