将包含.bat文件的可执行文件的stdout重定向到文件

时间:2011-05-05 20:07:57

标签: windows-xp batch-file console-application redirect stdout

我有一个调用可执行程序的批处理文件。程序(编译的C代码)生成一些输出到stdout。批量回声也有一些输出。运行bat时,我使用重定向(>)将文本转换为文件。

mybat.bat包含:

myprog.exe arg1 %1 arg3  
echo Done

然后,在控制台:

C:\> mybat arg2 > log.txt

问题在于log.txt我只得到echo Done命令的输出而不是myprog.exe的输出。如果没有重定向,我会在屏幕上得到预期的输出。

注意:在Windows XP下

更新:这变得更加怪异。从命令提示符运行myprog.exe时,我得到预期的输出到控制台。然后,当将其输出重定向到log.txt时,该文件为空!打印是使用fprintf(stdout, "...")fprintf(ofp, "...")完成的,其中ofp已分配:FILE *ofp = stdout;

进一步调查:似乎重定向的fprintf(stdout...行,而fprintf(ofp...不是(是的,指针被正确分配)。我还发现程序在某个时刻崩溃(调用feof())。所以,我的结论是,由于程序的异常终止,标准输出缓冲区没有写入文件。但是 - 这只发生在使用指针的行上。我猜这些行的输出较短,因此刷新频率较低(我使用stdout行打印故意的帮助信息)。

解决崩溃问题后,数据现在会重定向到日志文件。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

尝试将stdout和stderr重定向到日志文件。

mybat arg2 1>&2> log.txt

答案 1 :(得分:0)

试试这个:

cmd /c "mybat.bat arg2" > log.txt