3

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

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

echo %DATE% %TIME% some text ... >> %logfile% | c:\path\script1.bat >> %logfile%

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

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

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

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

4

1 回答 1

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%

或者更好

>>%logfile% (
  echo %DATE% %TIME% some text ...
  call c:\path\script1.bat
)
于 2013-08-29T16:56:56.997 回答