重定向批处理文件的输出,包括命令

时间:2012-05-21 22:14:52

标签: batch-file command redirect

我有一个执行一系列命令的批处理文件。当每个人执行时,它会返回"成功"或"失败"信息。它足够简单,可以使用>>重定向每个输出。并将其发送到一个文件,但没有相关的命令输出是无用的。

(批处理文件)

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

有关如何以最少的努力完成此任务的任何想法?

3 个答案:

答案 0 :(得分:2)

我认为您希望有选择地重定向批处理中的回显命令和输出,而不是整个批处理。

@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

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

myScript >myFile.txt

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

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

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

答案 1 :(得分:0)

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

@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"

答案 2 :(得分:0)

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

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