Как передать символ кавычки в cmd.exe? - PullRequest
18 голосов
/ 29 июля 2009

Я хочу вызвать:

"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"

с использованием cmd.exe. По моему опыту, cmd.exe удаляет либо первую пару цитат (что приводит к тому, что исполняемый файл не найден), либо вторую пару цитат (что приводит к неправильной интерпретации символа канала). Как передать символ цитируемого канала в cmd.exe?

Ответы [ 3 ]

26 голосов
/ 29 июля 2009

Вы можете сделать это так, как вы это делаете, заключив строку в кавычки |.

Или вы можете избежать этого с круговым акцентом ^:

"c:\(...)\devenv.com" foo.sln /build Debug^|Win32

В качестве примечания: почему вы строите это с DevEnv вместо MSBuild?

6 голосов
/ 27 июня 2011

Вот еще одно решение (обходной путь?), Которое я нашел:

сначала убедитесь, что переменная окружения определяет символ канала, например:
set PIPE="|"

позже, запустите команду, указав указанное выше имя переменной среды:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

Это делает работу, даже если между вызывающим абонентом и вызываемым абонентом есть несколько оболочек. Я сейчас использую это с очень длинной цепочкой оберток: Python / Linux -> VirtualProx гостевой executeProcess -> Cmd / Windows -> devenv.com

6 голосов
/ 29 июля 2009

Символ каретки (^) - это специальные символы оболочки для экранирования символов для таких вещей, как <,>, (,), ...

cmd/c "echo Hello ^"  World"

выход

Hello " World
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...