我有一个程序,我想自动运行,因为它需要一段时间才能完成。由于某种原因,它将所有内容输出到stderr而不是stdout,我想检查它的进度,所以我发现自己需要在启动命令中重定向stderr输出。
我试过了:
start "My_Program" "C:\Users\Me\my_program.exe" --some --presets --for
--my_program.exe --output "C:\Users\Me\output_file_for_my_program"
"C:\Users\Me\input_file_for_my_program" 2>"C:\Users\Me\my_program_output.log"
但事实证明,重定向正在被启动拾取,因此我得到一个0字节的文件,结果为start
- 即没有。有没有办法让输出重定向以某种方式附加到my_program的输出?
我已尝试逃避,^2>
和2^>
似乎都无法正常工作。任何帮助将不胜感激!
答案 0 :(得分:4)
试试这个:
start "My_Program" "%SystemRoot%\System32\cmd.exe" /c ""C:\Users\Me\my_program.exe" --some --presets --for --my_program.exe --output "C:\Users\Me\output_file_for_my_program" "C:\Users\Me\input_file_for_my_program" 2>"C:\Users\Me\my_program_output.log""
显然,这里没有“我的程序”我本身无法测试。如果我们认为内置的“FIND.EXE”命令在STDERR上返回“File not found-filename”,则以下内容对我有用:
start "My_Program" "%SystemRoot%\System32\cmd.exe" /c "find /v /i "blarg" "c:\not a real file.txt" 2> C:\stderr.txt"
答案 1 :(得分:3)
使用/ B开关。没有创建新窗口并保留重定向,但命令在后台运行,只是需要。
start /B test.bat >test.txt <nul
test.bat的:
@echo off
echo bbb
sleep 10
echo ccc
exit
答案 2 :(得分:2)
如何使用批处理文件中的重定向调用命令,并在批处理文件上使用start?
答案 3 :(得分:2)
我使用了以下命令,它起作用了:
start / affinity 2 / wait cmd.exe / C myprog.exe parameter1 parameter2 1 ^&gt; 。\ a.log 2&gt;&gt; \ b.log
参考:http://www.pcreview.co.uk/forums/redirect-standard-output-w-start-command-t1467634.html
阿布舍克巴克
答案 4 :(得分:0)
以下语法似乎可以解决问题:
start /wait /b my_program.exe
这将在后台运行程序并等待其完成。根据需要重定向stdout和stderr:
start /wait /b my_program.exe > output.txt 2>&1