如何在cmd中调用嵌套程序

Lar*_*rry 1 windows shell cmd batch-file

程序A(cmd.exe\C)(取1个参数)

程序B :(取一个或多个参数)

C1,C2,C3,......:一个agruments列表

如果我输入A B C1 C2 C3cmd提示符,则需要解释

A (B (C1 C2 C3)) (C是B的参数,B是A的参数)

但不是AS A (B) (C1) (C2) (C3)(B,C1,C2,C3,....是A的论据)

我应该如何在cmd提示符中转义/重定向/管道?

提前致谢

how*_*ghk 6

根据Microsoft的文档,您可以将|操作符用于管道.

您需要将命令重写为:

B C1 C2 C3 | A
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


UPDATE

既然你更新了你的问题,我想你正在尝试做类似的事情:

cmd.exe /C B C1 C2 C3
Run Code Online (Sandbox Code Playgroud)

你可以用特殊字符来逃避 ^

或尝试引用字符串,如下所示:

cmd.exe /C "B C1 C2 C3"
Run Code Online (Sandbox Code Playgroud)

更新2

如果你有问题cmd.exe /C和引号(例如B,C1,C2,C3包含空格),你应该用另一对引号括起整个命令

cmd.exe /C ""B" "C1" "C2" "C3""
Run Code Online (Sandbox Code Playgroud)

仅供参考,在Microsoft的cmd.exe文档Processing quotation marks部分中:

如果指定/ c或/ k,cmd将处理字符串的其余部分,并且仅在满足以下所有条件时才保留引号:

  • 你不使用/ s.
  • 您只使用一组引号.
  • 您不要在引号内使用任何特殊字符(例如:&<>()@ ^ |).
  • 您在引号内使用一个或多个空格字符.
  • 引号内的字符串是可执行文件的名称.

如果不满足先前的条件,则通过检查第一个字符来处理字符串以验证它是否是开始引号.如果第一个字符是开始引号,则它将与右引号一起被剥离.保留右引号后面的任何文本.

您可能还想阅读语法:转义字符,分隔符和引号:

在程序路径中启动带有空格的批处理脚本,需要"引号"

CMD /k ""c:\batch files\test.cmd" "Parameter 1 with space" "Parameter2 with space""