批处理脚本中的管道运算符

Ope*_*era 3 windows cmd pipe batch-file

对不起,如果这是一个重复的问题:-)

我从批处理脚本中得到了下面的代码行。(脚本.bat)

echo %DATE% %TIME% some text ... >> %logfile% | c:\path\script1.bat >> %logfile%
Run Code Online (Sandbox Code Playgroud)

管道(|)符号在这里的意义是什么?

script.bat 在命令行 (script.bat) 中运行良好,并且它也在运行 script1.bat。

从计划任务运行 script.bat 时,它间歇性地无法运行 script1.bat,以错误级别 1 退出。

任何人都知道这是什么| 在这里做:-)

dbe*_*ham 5

我假设您知道管道通常用于什么。在您的代码中,管道的两端都将其标准输出重定向到一个文件。所以管道没有达到它的正常目的。

Windows 实现管道的方式是为管道cmd的每一侧启动一个新线程。

在您的情况下,这|是实例化两个命令的并行处理的一种快速而肮脏的方法。

更新

我刚刚意识到管道的两侧都将标准输出重定向到同一个日志文件。这永远不会奏效,因为一次只有一个cmd进程(或线程)可以打开文件进行写访问。从命令行它当然对我不起作用。我收到以下错误:The process cannot access the file because it is being used by another process.唯一不会失败的方法是 iflogfile设置为nul.

如果我猜的话,我觉得原来的开发商打算使用&代替|。没有理由与另一个批处理脚本并行运行单个 ECHO 语句。看起来第一条语句只是一个时间戳。

我认为你的代码应该看起来像

echo %DATE% %TIME% some text ... >> %logfile% & call c:\path\script1.bat >> %logfile%
Run Code Online (Sandbox Code Playgroud)

或者更好

>>%logfile% (
  echo %DATE% %TIME% some text ...
  call c:\path\script1.bat
)
Run Code Online (Sandbox Code Playgroud)