#windows #cmd #command-line
Вопрос:
У меня есть следующая команда, установленная в качестве пользовательского протокола URL-адреса в реестре Windows:
cmd /V:ON /C "SET r=%1 amp; SET s=!r:jhvnc:=! amp; start C:Program Filesuvnc bvbaUltraVNCvncviewer.exe !s:_= !"
Это не работает, потому что в пути к исполняемому файлу есть пробел.
Обычно я бы использовал кавычки:
cmd /V:ON /C "SET r=%1 amp; SET s=!r:jhvnc:=! amp; start "C:Program Filesuvnc bvbaUltraVNCvncviewer.exe" !s:_= !"
но команда уже заключена в кавычки. Я попытался избежать кавычек с помощью двойных кавычек, но это не сработало.
Как я могу этого достичь?
Комментарии:
1. Я предлагаю вам открыть командную строку , запустить
start /?
и прочитать вывод справки. Первая"
строка аргумента в кавычках интерпретируется командой START как необязательный заголовок окна консоли. В вашем случае запускается приложение с графическим интерфейсом Windows, и по этой причине окно консоли вообще не открывается с помощью функции библиотеки Windows CreateProcess , используемойexplorer.exe
для запускаcmd.exe
иcmd.exe
для запускаvncviewer.exe
.2. Общее решение заключается
start
в том, чтобы сначала""
по команде «После» указать пустой заголовок окна при запуске приложения с графическим интерфейсом Windows, чтобы"C:Program Filesuvnc bvbaUltraVNCvncviewer.exe"
его интерпретировали как исполняемый файл с полным полным именем файла, заключенным в"
команду » ПУСК «. Я рекомендую запустить следующийcmd /?
и очень внимательно прочитать вывод справки. Было бы неплохо сослатьсяcmd
на его полное полное имя файла, дополнительно использовать параметры/D
и/E:ON
и явно использовать параметр/S
.3. Поэтому в реестре должно быть определено строковое значение с:
C:WindowsSystem32cmd.exe /D /E:ON /V:ON /S /C "set "r=%~1" amp; set "s=!r:jhvnc:=!" amp; start "" "C:Program Filesuvnc bvbaUltraVNCvncviewer.exe" "!s:_= !""
4. Команда(команды) после /C не нуждается в кавычках
5. Единственная проблемная часть в предложении Mofi заключается
%~1
в том , что оно не указано в кавычках, что может привести к ошибкам, если оно содержит специальные символы; единственный надежный способ, скорее всего, заключается в следующем:%ComSpec% /D /E:ON /V:ON /S /C ^"set "r=%~1" ^amp; set "s=!r:jhvnc:=!" ^amp; start "" "C:Program Filesuvnc bvbaUltraVNCvncviewer.exe" "!s:_= !"^"
(при экранировании большинства внешних кавычек, следовательно%~1
, они отображаются в кавычках)
Ответ №1:
Самое простое решение-использовать историческое короткое имя папки
Это должно быть C:PROGRA~1UVNCBV~1
проверьте с помощью dir /x /a:d C:PROGRA~1У*
cmd /V:ON /C "SET r=%1 amp; SET s=!r:jhvnc:=! amp; start C:PROGRA~1UVNCBV~1UltraVNCvncviewer.exe !s:_= !"
Комментарии:
1. Генерацию коротких имен можно отключить в операционной системе или на каждом томе.