为什么我不能重定向由另一个批处理调用的批处理文件运行的程序的标准输出/错误?

问题描述

如果我有这批:

ScriptA.bat

someprog.exe

还有这个:

ScriptB.bat

CALL ScriptA.bat

然后我执行如下命令:

ScriptB.bat > test.log

someprog.exe输出未记录。它流经控制台。如何避免将 someprog.exe输出通过管道显式传送到文件,而只是从更高级别捕获它?

(请注意,我最终希望使用大量脚本从这些嵌套内部启动各种 exe,我无法对它们进行全部编辑以重定向它们调用的每个子进程的输出)。

解决方法

我在另一个 SO 线程上找到了答案:

https://stackoverflow.com/a/11955380/3220983

如果阅读问题下的评论,您就会看到,我遇到的问题是我无法捕获的消息根本没有通过管道传输到 stdout 或 stderr!他们通过类似于 CON 重定向的方式从我试图使用的特定可执行文件中直接进入控制台。

我发布的链接显示了如何从批处理脚本启动 PowerShell 脚本,该脚本捕获整个控制台窗口内容,包括 CON 输出!