Как передать символ цитируемой трубы в 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