Windows 批处理文件 - 如何通过管道将输出传输到文本文件然后打开文本文件?

Windows 批处理文件 - 如何通过管道将输出传输到文本文件然后打开文本文件?

我遇到了一个奇怪的问题,我有一个简单的批处理文件,它运行另一个批处理文件,将屏幕上的内容输出到日志文件,然后尝试打开日志文件。问题是,日志文件没有打开。这是代码。

echo %date%, %time%: Deploying web site to Test1. > deploy.bat.log
Archive.deploy.cmd /Y /M:Test1 /U:<User> /P:<Password> >> deploy.bat.log
start "" notepad.exe deploy.bat.log

通过反复试验,我发现注释对外部批处理文件的调用可以使日志文件打开,正如预期的那样。

echo %date%, %time%: Deploying web site to Test1. > deploy.bat.log
REM Archive.deploy.cmd /Y /M:Test1 /U:<User> /P:<Password> >> deploy.bat.log
start "" notepad.exe deploy.bat.log

为了检查,我还将另一个批处理文件替换为一个可以执行此操作的文件echo Hello World,但问题仍然存在 - 日志文件无法打开。我以为是另一个批处理文件中发生了一些事情导致它失败,但事实并非如此 - 此示例仍然不起作用。

echo %date%, %time%: Deploying web site to Test1. > deploy.bat.log
Hello.bat
start "" notepad.exe deploy.bat.log

我的问题是,为什么日志文件无法打开?我该如何修复它?

答案1

命令链接到批处理文件,即被调用的批处理文件替换调用批处理文件并且不返回,因此批处理调用之后的任何调用都不会被看到。如果要从批处理文件返回,则必须使用称呼命令,例如:

echo %date%, %time%: Deploying web site to Test1. > deploy.bat.log
call Hello.bat
start "" notepad.exe deploy.bat.log

可能并非您所期望的那样,但恐怕 DOS 早期的一个糟糕设计决策仍然存在。我不确定现代 Windows 版本中使用了多少个 DOS1 批处理文件,但我可以猜测一下。

相关内容