很抱歉,如果这是一个重复的问题: - )
我从批处理脚本获得了以下代码行。 (script.bat)
echo %DATE% %TIME% some text ... >> %logfile% | c:\path\script1.bat >> %logfile%
管道( | )符号在这里有什么意义?
script.bat在命令行(script.bat)中工作正常,并且它也在运行script1.bat。
从计划任务运行script.bat时,它间歇性地无法运行script1.bat,退出errorlevel 1。
任何人都知道 | 在这里做了什么: - )
答案 0 :(得分:2)
我假设您知道通常使用的管道。在您的代码中,管道的两端都将其标准输出重定向到文件。所以管道没有达到正常目的。
Windows实现管道的方法是为管道的每一侧启动一个新的cmd
线程。
在您的情况下,|
是一种快速而又脏的方式来实例化两个命令的并行处理。
<强>更新强>
我刚刚意识到管道的两端都将stdout重定向到同一个日志文件。这应该永远不会起作用,因为一次只有一个cmd
进程(或线程)可以打开文件进行写访问。从命令行来看,它当然对我不起作用。我收到以下错误:The process cannot access the file because it is being used by another process.
唯一不失败的方法是将logfile
设置为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
)