【问题标题】:Batch Script not raising ERRORLEVEL on failure批处理脚本在失败时不提高 ERRORLEVEL
【发布时间】:2015-06-27 03:27:51
【问题描述】:

我正在学习 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

【问题讨论】:

  • 只是为了添加一些东西,回显 ERRORLEVEL 的尝试总是返回 '0' 并且 IF 语句永远不会触发。

标签: batch-file error-handling cmd scripting errorlevel


【解决方案1】:

DEL 命令不会更改错误级别 - more info 检查 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

【讨论】:

  • 哪些命令会在哪些条件下产生错误级别?有什么方法可以轻松地将 stderr 捕获到变量中?我猜移动和复制也不会提高错误级别?编辑:哦,我看到你正在捕获和检查 stderr .....
  • @IbadRahman - 复制和移动将正确设置错误级别。问题仅与RD、DEL 和重定向有关。发布的行将通过FINDSTR 命令提高错误级别。
  • 你在这里做什么?只要 stderr 是任何东西(不是空或空),您就会检测到错误? findstr 之前的管道有什么作用?无论如何...我会阅读您的链接...TY!
猜你喜欢
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2013-03-12
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
相关资源
最近更新 更多