如何将引用的管道字符传递给cmd.exe?

Gil*_*ili 18 cmd

我想调用:

"c:\(...)\devenv.com" foo.sln /build "Debug|Win32"
Run Code Online (Sandbox Code Playgroud)

使用cmd.exe.根据我的经验,cmd.exe要么删除第一对引号(导致找不到可执行文件),要么删除第二对引号(导致管道符被误解).如何将引用的管道字符传递给cmd.exe?

Joe*_*oey 26

你可以像在那里那样做,用|引号括起字符串.

或者你可以用抑扬的口音 来逃避它^:

"c:\(...)\devenv.com" foo.sln /build Debug^|Win32
Run Code Online (Sandbox Code Playgroud)

作为旁注:为什么要使用DevEnv而不是MSBuild构建它?


Ahm*_*med 6

插入符号(^)是用于转义字符的特殊shell字符,例如<,>,(,),...

cmd/c "echo Hello ^"  World"
Run Code Online (Sandbox Code Playgroud)

产量

Hello " World
Run Code Online (Sandbox Code Playgroud)


rde*_*pes 6

这是另一个解决方案(解决方法?)我发现:

首先,确保环境变量定义管道字符,例如:
set PIPE="|"

稍后,运行指定上面定义的环境变量名称的命令:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

即使调用者和被调用者之间有多个包装器,这也能完成工作.我现在正在使用它包含很长的包装器:Python/Linux - > VirtualBox guest的executeProcess - > Cmd/Windows - > devenv.com