【问题标题】:Is there any way to redirect stderr output from a command run with "start" in the Windows command line?有没有办法从 Windows 命令行中使用“start”运行的命令重定向 stderr 输出?
【发布时间】:2010-11-21 12:29:17
【问题描述】:

我有一个程序要自动运行,因为它需要一段时间才能完成。出于某种原因,它将所有内容都输出到 stderr 而不是 stdout,我想检查它的进度,所以我发现自己需要在 start 命令中重定向 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"

但事实证明,重定向正在被 start 拾取,因此我得到了一个 0 字节的文件,其结果为 start - 即什么也没有。有没有办法让输出重定向以某种方式附加到 my_program 的输出?

我尝试过转义,^2>2^> 似乎都不起作用。任何帮助将不胜感激!

【问题讨论】:

    标签: windows redirect command stderr


    【解决方案1】:

    试试这个:

    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 上返回“找不到文件 - 文件名”,则以下内容对我有用:

    start "My_Program" "%SystemRoot%\System32\cmd.exe" /c "find /v /i "blarg" "c:\not a real file.txt" 2> C:\stderr.txt"
    

    【讨论】:

      【解决方案2】:

      使用 /B 开关。不会创建新窗口并且保留重定向,但该命令会根据需要在后台运行。

      start /B test.bat >test.txt <nul
      

      test.bat:

      @echo off
      echo bbb
      sleep 10
      echo ccc
      exit
      

      【讨论】:

        【解决方案3】:

        如何在批处理文件中调用带有重定向的命令,并在批处理文件中使用 start?

        【讨论】:

        • 我宁愿不使用批处理文件,因为这个特定的命令需要使用不同的输入和输出文件以及不同的参数多次运行。作为最后的手段,我会尝试一下,但现在我希望有另一种解决方案。顺便说一句,有什么办法可以结束这个问题吗?我意识到这不是问这个问题的正确地方,并将其发布在 StackOverflow 上。
        • 我标记了它。运气好的话,版主会四处走动,把它移到 SO,然后我们可以关闭已经在 SO 上的那个,因为它还没有得到回应。
        • 谢谢,非常感谢 EBGreen。
        • 如果涉及到它 - 您也可以将参数传递到批处理文件中。
        • 50/50 如果是 SO 或 SF,因为编写脚本的主要是 SFers。无论如何,MattB 是正确的,您可以使用 %1 %2 %3 %4 等作为参数,因此可以启动 "My_Program" "C:\Users\Me\my_program.exe" %1 %2 %3 %4 --输出 %5 %6 2>%7,并以 "mybatch.bat" --some --presets --for --my_program.exe "C:\Users\Me\output_file_for_my_program" "C:\ Users\Me\input_file_for_my_program" "C:\Users\Me\my_program_output.log"
        【解决方案4】:

        我使用了以下命令,它成功了:

        start /affinity 2 /wait cmd.exe /C myprog.exe parameter1 parameter2 1^> .\a.log 2>> .\b.log

        参考:http://www.pcreview.co.uk/forums/redirect-standard-output-w-start-command-t1467634.html

        阿布舍克

        【讨论】:

          【解决方案5】:

          以下语法似乎可以解决问题:

          start /wait /b my_program.exe
          

          这会在后台运行程序并等待它完成。根据需要重定向 stdout 和 stderr:

          start /wait /b my_program.exe > output.txt 2>&1
          

          【讨论】:

            猜你喜欢
            • 2013-08-30
            • 1970-01-01
            • 2010-11-29
            • 2022-10-21
            • 2015-11-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多