Batch file 在开始命令内使用| |双管道

Batch file 在开始命令内使用| |双管道,batch-file,cmd,parallel-processing,nested,Batch File,Cmd,Parallel Processing,Nested,近似 CMD /C Do.cmd || goto :error 我试图在start语句中使用双管道作为命令的一部分,但无法正确嵌套它。即,“on error”语句仅在start命令本身失败时运行(即作为调用方脚本的一部分)。但是我希望启动的子进程在主do.cmd失败时运行它 以下是我试图运行的内容: ( start „parallelproc1“ cmd /c do.cmd || echo 1 > pperror.log start „parallelproc2

近似

CMD /C Do.cmd || goto :error
我试图在start语句中使用双管道作为命令的一部分,但无法正确嵌套它。即,“on error”语句仅在start命令本身失败时运行(即作为调用方脚本的一部分)。但是我希望启动的子进程在主do.cmd失败时运行它

以下是我试图运行的内容:

( 
      start „parallelproc1“ cmd /c do.cmd || echo 1 > pperror.log
      start „parallelproc2“ cmd /c do.cmd || echo 1 > pperror.log
    ) | pause
    if exist pperror.log goto :error
    Continue.cmd

基本上,我只想继续,如果parallelproc的do.cmd没有一个失败。我可以不使用| | inside start吗?

您需要告诉解析器如何“分组”命令行的各个部分:

start "parallelproc1" cmd /c "do.cmd || echo 1 > pperror.log"
请参见
cmd/?
,尤其是以以下内容开头的部分:

如果指定了/C或/K i,则在 该开关作为命令行处理

告诉解析器将有毒字符(如
|
传递给子进程)的另一种方法是转义它们:

start "parallelproc1" cmd /c do.cmd ^|^| echo 1 ^> pperror.log

(就我个人而言,我更喜欢第一个,但在某些特殊情况下可能有理由使用第二个)

这里有很多错误。首先,您需要正确地引用,但就
|
而言,它的工作方式与您使用的方式不同。您需要将其用作条件语句,但为了更好地理解它,我需要了解
do.cmd
的作用。我们通常也
调用批处理文件,而不是
启动批处理文件。如果成功,Do.cmd将以0退出,否则以1/errorlevel退出。。今晚一到家,我就会相应地扩展这个例子&修正我所想的格式。请看下面@stephan的答案。“分组”即用引号括起来非常有效,thx:)我以前确实尝试过转义,但完全没有转义>-符号!(我还在实际代码中使用各种变量,这使得对转义方法进行故障排除成为一种绝对的痛苦)