Как передать символ канала в кавычках в cmd.exe?
-
05-07-2019 - |
Вопрос
Я хочу вызвать:
"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"
с помощью cmd.exe.По моему опыту, cmd.exe либо удаляет первую пару кавычек (из-за чего исполняемый файл не может быть найден), либо вторую пару кавычек (что приводит к неправильной интерпретации символа вертикальной черты). Как передать символ канала в кавычках в cmd.exe?
Решение
Вы можете сделать это так, как вы это делаете, заключив строку в кавычки |
.
Или вы можете избежать этого с помощью кругового акцента ^
:
"c:\(...)\devenv.com" foo.sln /build Debug^|Win32
В качестве примечания: почему вы строите это с DevEnv вместо MSBuild?
Другие советы
Символ каретки (^) — это специальный символ оболочки, который служит для экранирования таких символов, как <, >, (, ), ...
cmd/c "echo Hello ^" World"
Выход
Hello " World
Вот еще одно решение (обходной путь?), которое я нашел:
сначала убедитесь, что переменная окружения определяет символ канала, например:
set PIPE="|"
Р>
позже запустите команду, указав указанное выше имя переменной среды:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32
Р>
Это делает работу, даже если между вызывающим абонентом и вызываемым абонентом есть несколько оболочек. Я сейчас использую это с очень длинной цепочкой оберток: Python / Linux - & Gt; GuestProcessProcess гостя VirtualBox - & Gt; Cmd / Windows - & Gt; devenv.com р>