Как передать символ цитируемой трубы в cmd.exe?
Я хочу вызвать:
"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"
с помощью cmd.exe. По моему опыту, cmd.exe либо удаляет первую пару кавычек (заставляя исполняемый файл не быть найденным), либо вторую пару кавычек (вызывая неправильный интерпретатор канала). Как передать символ цитируемой строки в cmd.exe?
Ответы
Ответ 1
Вы можете сделать это так, как вы там делаете, включая строку с |
в кавычках.
Или вы можете избежать этого с помощью обводного акцента ^
:
"c:\(...)\devenv.com" foo.sln /build Debug^|Win32
Как примечание: почему вы создаете это с помощью DevEnv вместо MSBuild?
Ответ 2
Символ каретки (^) является специальным символом оболочки для символа escape для таких вещей, как <, > , (,),...
cmd/c "echo Hello ^" World"
Выход
Hello " World
Ответ 3
Здесь другое решение (обходное решение?), которое я нашел:
во-первых, убедитесь, что переменная среды определяет символ канала, например:
set PIPE="|"
запустите команду, указав указанное выше имя переменной среды:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32
Это делает работу, даже если между вызывающим и вызываемым абонентами есть несколько оберток. Теперь я использую его с очень длинной цепочкой оберток:
Python/Linux → VirtualBox guest executeProcess → Cmd/Windows → devenv.com