我对这个论坛很陌生,所以我首先要感谢你在我成为会员之前为我提供解决方案:)。
所以我有这段代码:
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中返回正确的退出代码),因为我无法通过复制或移动来获取它...
谢谢! 安德鲁
答案 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)
)