Как передать символ канала в кавычках в cmd.exe?

StackOverflow https://stackoverflow.com/questions/1200235

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top