кавычки внутри кавычек с помощью cmd Windows

#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. Генерацию коротких имен можно отключить в операционной системе или на каждом томе.