【问题标题】:How to pass a quoted pipe character to cmd.exe?如何将带引号的管道字符传递给 cmd.exe?
【发布时间】:2010-11-15 01:46:46
【问题描述】:

我想调用:

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

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

【问题讨论】:

    标签: cmd


    【解决方案1】:

    您可以按照自己的方式进行操作,用引号将| 括起来。

    或者你可以用 circumflex 重音 ^:

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

    附带说明:为什么要使用 DevEnv 而不是 MSBuild 来构建它?

    【讨论】:

    • DevEnv 总是“足够好”,我对 MSBuild 并不熟悉。我有一个跨平台的构建系统,它在后台调用 DevEnv,所以我认为使用 MSBuild 并没有太多收获。我会吗?
    • 顺便问一下,这个转义字符记录在哪里?
    【解决方案2】:

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

    cmd/c "echo Hello ^"  World"
    

    输出

    Hello " World
    

    【讨论】:

      【解决方案3】:

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

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

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

      即使调用者和被调用者之间有多个包装器,它也能完成工作。我现在将它与很长的包装链一起使用: Python/Linux -> VirtualBox 来宾的 executeProcess -> Cmd/Windows -> devenv.com

      【讨论】:

      • 这是我定义一个传递给powershell -c %variable%的变量的唯一方法。 set variable=' ... | ...'set variable=" ... | ... " 以及带有或不带有单引号或双引号的 ^| 的任何组合都不适合我。变量的定义已经报错了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2014-06-11
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多