Batch file 批处理脚本未在失败时提高ERRORLEVEL

Batch file 批处理脚本未在失败时提高ERRORLEVEL,batch-file,error-handling,cmd,scripting,errorlevel,Batch File,Error Handling,Cmd,Scripting,Errorlevel,我正在学习Windows批处理脚本。当复制、移动或删除操作失败时,我需要引发错误。我制作了一个示例脚本,由于某种原因,当操作失败时,我无法使ERRORLEVEL上升。我运行脚本,文件要么不存在,要么在另一个程序中打开,stderr消息输出到控制台,但ERRORLEVEL从未上升,这是为什么?还有,如果我不能使ERRORLEVEL上升,有没有办法将stderr导入一个我可以检查的变量 我的代码如下: `@Echo Off ECHO. Set /P myVar=Please enter a valu

我正在学习Windows批处理脚本。当复制、移动或删除操作失败时,我需要引发错误。我制作了一个示例脚本,由于某种原因,当操作失败时,我无法使ERRORLEVEL上升。我运行脚本,文件要么不存在,要么在另一个程序中打开,stderr消息输出到控制台,但ERRORLEVEL从未上升,这是为什么?还有,如果我不能使ERRORLEVEL上升,有没有办法将stderr导入一个我可以检查的变量

我的代码如下:

`@Echo Off
ECHO.
Set /P myVar=Please enter a value:
Echo var = %myVar%
ECHO Trying to delete the file dummy.csv >> log.txt
Set myVar2 = nothing
DEL C:\dummy420.csv  
IF NOT ERRORLEVEL 0 ECHO There was an error
ECHO %ERRORLEVEL%
REM 2>myVar2
REM Echo 2>
REM Echo %myVar2%
Echo 2>&1
REM && (echo yourCommand was successful) || (echo yourCommand failed)
IF NOT ERRORLEVEL 0 ECHO There was an error
ECHO %ERRORLEVEL%
Move ""C:\dummy420.csv" D:\"
IF NOT ERRORLEVEL 0 ECHO There was an error
Set /P dummy=Press Enter to End`
这是我的输出:

Please enter a value:hello
var = hello
C:\dummy420.csv
The process cannot access the file because it is being used by another process.
0
ECHO is off.
0
The filename, directory name, or volume label syntax is incorrect.
Press Enter to End

DEL
命令不会更改错误级别- 检查debenham建议以检测失败的删除:

3>&2 2>&1 1>&3 del C:\dummy420.csv|findstr . && echo DEL failed || echo DEL succeeded
要更改错误级别,请执行以下操作:

3>&2 2>&1 1>&3 del C:\dummy420.csv|findstr .&& cmd /c exit /b 1

只是为了添加一些东西,在回显ERRORLEVEL时的尝试总是返回“0”,并且IF语句从不触发。哪些命令为哪些条件生成错误级别?有什么方法可以轻松地将stderr捕获到变量中?我猜移动和复制也不会提高错误级别?编辑:哦,我看到你正在捕获和检查stderr…@IbadRahman-复制和移动将正确设置错误级别。问题只存在于
RD
DEL
和重定向。发布的行将通过
FINDSTR
命令提高错误级别。你在这里做什么?只要stderr是任何东西(不是空的或null),您就可以检测到错误吗?在findstr之前的管道做什么?无论如何…我会读你的链接…泰!