无法从批处理脚本中的失败MOVE命令获取错误级别

时间:2013-10-03 20:20:12

标签: batch-file exit-code errorlevel

我对这个论坛很陌生,所以我首先要感谢你在我成为会员之前为我提供解决方案:)。

所以我有这段代码:

for %%a in ("%PBpath%") do ( 
move "network location 1 files" "network location 2" >NUL
if ERRORLEVEL 0 (echo Diagram %%~na.pdf was successfuly archived) else ( echo            Diagram %%~na.pdf was not archived )
ECHO.%errorlevel%
          )

问题是我无法得到不同于0的错误级别。即使从位置丢失了要复制的文件,我仍然可以回显成功存档的消息。我在论坛上搜索了类似的问题,但由于某些原因我无法使其工作。 copy和ping命令之间是否有不同之处(ping命令在errorlevel中返回正确的退出代码),因为我无法通过复制或移动来获取它...

谢谢! 安德鲁

3 个答案:

答案 0 :(得分:7)

关于IF ERRORLEVEL语句的一个奇怪的事情是它不像你期望的那样 - 如果errorlevel等于 或者大于 那么它返回TRUE指定。 MOVE中的失败将errorlevel设置为1(我刚刚检查),该值大于0.因此将始终使用IF语句中的第一个子句。修复脚本的最简单方法是撤消IF语句中的条件:

if ERRORLEVEL 1 (echo file was not archived) else (echo file was successfully archived)

答案 1 :(得分:3)

只需使用%ERRORLEVEL%变量而不是ERRORLEVEL函数

答案 2 :(得分:0)

如果想要使用ERRORLEVEL功能,Superbob's answer地址'这个(虽然我会推荐使用if NOT ERRORLEVEL 1 (echo file was successfully archived) else (echo file was not archived)形式)。

但是如果想要使用%ERRORLEVEL%变量方法,则需要打开Delayed Expansion。上面的OP代码以及建议的更改如下:

setlocal enabledelayedexpansion

for %%a in ("%PBpath%") do (
  move "network location 1 files" "network location 2" >NUL
  if !ERRORLEVEL! equ 0 (
    echo Diagram %%~na.pdf was successfully archived
  ) else (
    echo Diagram %%~na.pdf was not archived)
)