2

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

(批处理文件)

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

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

4

3 回答 3

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

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

myScript >myFile.txt

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

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

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

于 2012-05-22T00:52:01.120 回答
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"
于 2012-05-24T18:59:55.217 回答
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
于 2013-06-13T22:25:48.527 回答