捕获命令的输出并检查批处理脚本中的错误级别

Pak*_*Pak 7 windows error-handling batch-file

我有一个命令(我们称之为command),它打印到标准输出,并且还会根据执行的成功或失败设置 ERRORLEVEL 。我想command从将处理 的输出的批处理脚本中调用command,但前提是以commandERRORLEVEL 为 0 退出(即成功)。这最好不需要临时文件或检查命令的输出来推断它是否成功。

我可以使用for语句捕获命令的输出,但在执行此操作时检查 ERRORLEVEL 时遇到问题。我尝试过类似的事情:

for /F %%A in ('command') do (
     REM The following check does not seem to work
     if ERRORLEVEL 1 goto error
     REM otherwise, do stuff with %%A
)
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用%errorlevel%and !errorlevel!(with setlocal enabledelayedexpansion),但都不起作用。

Mof*_*ofi 2

使用如下代码:

@echo off
"command.exe">"%TEMP%\CommandOutput.tmp"
if errorlevel 1 goto Failed

for /F "usebackq" %%A in ("%TEMP%\CommandOutput.tmp") do (
     REM Do stuff with %%A
     echo %%A
)
goto DelTempFile

:Failed
echo There was an error on executing command.

:DelTempFile
if exist "%TEMP%\CommandOutput.tmp" del "%TEMP%\CommandOutput.tmp"
Run Code Online (Sandbox Code Playgroud)

此批处理代码首先运行命令,并将标准输出重定向到临时文件文件夹中的文件。接下来,它评估命令的退出代码。

如果没有错误,则使用for处理输出。

出现错误时会显示相应的错误消息。

最后,在批处理终止之前删除包含捕获输出的临时文件。

  • 感谢您的回复,但我正在寻找一种不需要创建临时文件的解决方案(如果可能的话)。 (3认同)