如何从命令结果中获取 for /f 循环中的错误级别?
How to get an errorlevel in a for /f loop from the command result?
我是 运行 批处理文件中的 SQL 请求,我需要获取错误级别及其提供的输出。我试过使用 :
for /f "tokens=*" %%i in ('%SQLCommand%') do ( ...
并且在 'do' 中,如果错误级别为 1,那么我可以做任何我打算做的事情,但我似乎无法找到从命令结果中获取错误级别的方法.我也不确定错误级别是否可以在循环中更改,但我正计划对其进行测试,这样我就能知道命令是否会更改错误级别。
这里的问题是分配给环境变量 SQLCommand
的命令行由 FOR 在后台单独的命令进程中执行 cmd.exe /C
和它处理 STDOUT 的输出被 FOR 捕获并逐行处理。因此,无法在执行批处理文件的命令进程中评估 SQL 命令行的退出代码。
最可能的最佳解决方案是 运行 当前命令进程中的 SQL 命令行,将 SQL 命令行的输出重定向到临时文件,评估退出代码并根据退出代码处理输出。
下面的批处理文件演示了这个解决方案。它可以在没有参数的情况下启动,使用有效的 file/folder 名称作为第一个参数,或者使用无效的 file/folder 名称来监视错误处理。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "OutputFile=%TEMP%\%~n0.tmp"
if "%~1" == "" ( set "DirArg=%TEMP%" ) else set "DirArg=%~1"
set "SQLCommand=dir /A /B "%DirArg%""
%SQLCommand% >"%OutputFile%" 2>nul
echo/
if errorlevel 1 (
echo An error occurred on execution of command:
echo/
echo %SQLCommand%
echo/
echo Exit code is: %ERRORLEVEL%
goto EndBatch
)
echo Execution of command was successful. The output is:
echo/
for /F "usebackq delims=" %%I in ("%OutputFile%") do echo %%I
:EndBatch
del "%OutputFile%"
endlocal
echo/
pause
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
del /?
echo /?
endlocal /?
for /?
goto /?
if /?
pause /?
set /?
setlocal /?
另请参阅 Stack Overflow 问题:
我是 运行 批处理文件中的 SQL 请求,我需要获取错误级别及其提供的输出。我试过使用 :
for /f "tokens=*" %%i in ('%SQLCommand%') do ( ...
并且在 'do' 中,如果错误级别为 1,那么我可以做任何我打算做的事情,但我似乎无法找到从命令结果中获取错误级别的方法.我也不确定错误级别是否可以在循环中更改,但我正计划对其进行测试,这样我就能知道命令是否会更改错误级别。
这里的问题是分配给环境变量 SQLCommand
的命令行由 FOR 在后台单独的命令进程中执行 cmd.exe /C
和它处理 STDOUT 的输出被 FOR 捕获并逐行处理。因此,无法在执行批处理文件的命令进程中评估 SQL 命令行的退出代码。
最可能的最佳解决方案是 运行 当前命令进程中的 SQL 命令行,将 SQL 命令行的输出重定向到临时文件,评估退出代码并根据退出代码处理输出。
下面的批处理文件演示了这个解决方案。它可以在没有参数的情况下启动,使用有效的 file/folder 名称作为第一个参数,或者使用无效的 file/folder 名称来监视错误处理。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "OutputFile=%TEMP%\%~n0.tmp"
if "%~1" == "" ( set "DirArg=%TEMP%" ) else set "DirArg=%~1"
set "SQLCommand=dir /A /B "%DirArg%""
%SQLCommand% >"%OutputFile%" 2>nul
echo/
if errorlevel 1 (
echo An error occurred on execution of command:
echo/
echo %SQLCommand%
echo/
echo Exit code is: %ERRORLEVEL%
goto EndBatch
)
echo Execution of command was successful. The output is:
echo/
for /F "usebackq delims=" %%I in ("%OutputFile%") do echo %%I
:EndBatch
del "%OutputFile%"
endlocal
echo/
pause
要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
del /?
echo /?
endlocal /?
for /?
goto /?
if /?
pause /?
set /?
setlocal /?
另请参阅 Stack Overflow 问题: