【问题标题】:Redirecting output from a batch file, INCLUDING the commands重定向批处理文件的输出,包括命令
【发布时间】:2012-05-28 10:24:11
【问题描述】:

我有一个执行一系列命令的批处理文件。在每个执行过程中,它都会返回“成功”或“失败”消息。它很简单,可以使用 >> 重定向每个输出并将其发送到文件,但如果没有关联的命令,输出是无用的。

(批处理文件)

Command "D21" >> Myfile.txt
Command "D22" >> Myfile.txt
Command "D23" >> Myfile.txt
Command "D24" >> Myfile.txt

(输出文件:Myfile.txt)

Fail
Succeed
Fail
Succeed

我还想做的是将执行的命令发送到该文件,所以它可能看起来像这样......

(所需的输出文件:Myfile.txt)

Command "D21" Fail
Command "D22" Fail
Command "D23" Succeed
Command "D24" Succeed

我有什么想法可以用最少的努力完成这项工作吗?

【问题讨论】:

  • 欢迎来到 StackOverflow。发布时请花时间正确格式化您的代码。您可以通过缩进至少四个空格来实现,或者选择所有代码并单击带有大括号 ({}) 的工具栏按钮或按 Ctrl+K。您可以在文本框正下方以某种所见即所得的方式输入帖子时预览您的帖子,这样您就可以在发布前实时正确地格式化它。另外,请避免在您的帖子中使用签名;您有一个与您的帐户相关联的个人资料页面,允许您发布您的姓名等个人信息。谢谢。 :)

标签: batch-file command redirect


【解决方案1】:

我假设您想在批处理中选择性地重定向回显的命令和输出,而不是整个批处理。

@echo off
echo before not echoed, not captured
call :echoCommands >myFile.txt
echo after not echoed, not captured
exit /b

:echoCommands
echo on
Command "D21"
Command "D22"
Command "D23"
Command "D24"
@echo off
exit /b

如果要捕获整个批处理文件,则只需从脚本中删除重定向,不要关闭回显,并在调用批处理脚本时进行重定向。

myScript >myFile.txt

如果你想用命令捕获整个文件输出,并且你真的想在脚本中重定向,那么类似

@if "%~1" neq "_GO_" (
  >myFile.txt call "%~f0" _GO_ %*
  exit /b
)
@echo on
Command "D21"
Command "D22"
Command "D23"
Command "D24"

在上述所有解决方案中,每个命令都将打印在一行上,输出将在后续行中。

【讨论】:

    【解决方案2】:

    这是将命令和响应放在同一行的方式

    @echo off
    for /f "skip=6 delims=" %%i in (%~dpnx0) do (
        <nul set /p =%%i >> MyFile.txt
        %%i >> MyFile.txt
    )
    goto :eof
    Command "D21"
    Command "D22"
    Command "D23"
    Command "D24"
    

    【讨论】:

      【解决方案3】:

      有两种方法可以做到这一点。第一个有点“神秘”,但它可以在一行命令中完成:

      for %%f in ("Command "D21"" "Command "D22"" "Command "D23"" "Command "D24"") do for /F "usebackq delims=" %%g in (`%%~f`) do echo %%~f %%g >> MyFile.txt
      

      这应该可以正常工作。添加更多 Command "xxx" 只是有点麻烦。

      第二种方式是使用“子程序”来处理工作:

      @echo off
      
      call :work Command "D21"
      call :work Command "D22"
      call :work Command "D23"
      call :work Command "D24"
      goto :EOF
      
      
      
      :work
      for /F "usebackq delims=" %%g in (`%*`) do echo %* %%g
      goto :EOF
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 1970-01-01
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        相关资源
        最近更新 更多