我有一个脚本a.cmd,调用另一个脚本b.cmd,并将其输出重定向。被调用的脚本启动一个从未终止的可执行文件,该可执行文件的输出被重定向到自己的日志文件中。简化代码:
a.cmd:
[1] @ECHO OFF
[2] SET LOG_FILE_NAME="log.txt"
[3] REM Start the b.cmd redirecting all output
[4] CALL b.cmd >> %LOG_FILE_NAME% 2>&1
[5] ECHO returned to a.cmd >> %LOG_FILE_NAME% 2>&1
[6] EXIT /B 0
b.cmd:
[1] @ECHO OFF
[2] SET ANOTHER_LOG_FILE_NAME="log2.txt"
[4] ECHO RunForEver.exe redirecting all output
[5] START CMD /C "RunForEver.exe >> %ANOTHER_LOG_FILE_NAME% 2>&1"
[6] ECHO b.cmd execution complete
[7] EXIT /B 0
(为了方便起见,添加了行号)
我遇到的问题是,在b.cmd的第4行似乎抓住了初始日志文件(LOG_FILE_NAME),因为所有b.cmd输出都被重定向到它,而且当可执行文件(以及启动它的cmd)正在运行时,句柄没有释放。 我没想到会出现这种情况,因为我认为只有start命令本身的输出才会被重定向到LOG_FILE_NAME日志文件,实际运行RunForEver.exe可执行文件的其他进程的输出将写入ANOTHER_LOG_FILE_NAME。 结果,a.cmd的第5行错误地拒绝访问LOG_FILE_NAME。
有人能解释一下发生了什么吗?有没有办法避免这种情况?
我尝试在b.cmd内部执行输出重定向到LOG_FILE_NAME,但然后我会在b.cmd的第2行收到访问被拒绝的错误。
提前感谢!