关于批处理if errorlevel 1
第一,首先看下面的这个程序:@echooffxcopyappData.xlse:\iferrorlevel5gotosug5iferrorlevel4gotosug4if...
第一,首先看下面的这个程序:
@echo off
xcopy appData.xls e:\
if errorlevel 5 goto sug5
if errorlevel 4 goto sug4
if errorlevel 2 goto sug2
if errorlevel 1 goto sug1
if errorlevel 0 goto sug0
:sug5
echo 拷贝过程中写盘错误
echo 程序将退出
goto end
:sug4
echo 预制错误阻止文件拷贝操作
echo 程序将退出
goto end
:sug2
echo 用户通过ctrl-c终止拷贝操作
echo 程序将退出
goto end
:sug1
echo 未找到拷贝文件
echo 程序将退出
goto end
:sug0
echo 拷贝文件成功!
goto end
:end
echo 2秒后退出
ping -n 2 127.0.0.1>nul
pause
exit
执行该批处理时,如果appData.xls 和它放在同一目录显示是:拷贝文件成功!
若是在其他地方,都会显示:
也就是if errorlevel 4 goto sug4这个判断语句
系统说明不是这样吗?
xcopy
0 成功拷贝文件 1 未找到拷贝文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 5 拷贝过程中写盘错误
在此处有疑问??,
第二,同样的语句做了以下修改
@echo off
setlocal enabledelayedexpansion
xcopy appData.xls e:\
if %errorlevel%==%5%(
echo 拷贝过程中写盘错误
goto end
)
if %errorlevel%==%4%(
echo 预制错误阻止文件拷贝操作
goto end
)
if %errorlevel%==%2%(
echo 用户通过ctrl-c终止拷贝操作
goto end
)
if %errorlevel%==%1%(
echo 未找到拷贝文件
goto end
)
if %errorlevel%==%0%(
echo 成功拷贝文件
goto end
)
:end
echo 3秒后将退出
ping -n 3 127.0.0.1>nul
pause
exit
自以为没问题,但是运行时却是一闪而过,实在是想不通哪里出错了,哎,请高人帮忙指点一下吧!
@ 巧虎星期六:
如您所说,第一段改成:if %errorlevel%==5 执行还是那样子显示,看样子系统判断后给的返回值 对应的解释与实际矛盾,明明应当是显示未找到拷贝文件,却是显示预制错误阻止文件拷贝操作
第二段改成:if %errorlevel%==5 这样执行还是闪退,后来我改成这样:
if errorlevel==5 echo 拷贝过程中写盘错误&goto end
执行结果和1是一样的,这()不知道哪里用的不对了,比较郁闷 展开
@echo off
xcopy appData.xls e:\
if errorlevel 5 goto sug5
if errorlevel 4 goto sug4
if errorlevel 2 goto sug2
if errorlevel 1 goto sug1
if errorlevel 0 goto sug0
:sug5
echo 拷贝过程中写盘错误
echo 程序将退出
goto end
:sug4
echo 预制错误阻止文件拷贝操作
echo 程序将退出
goto end
:sug2
echo 用户通过ctrl-c终止拷贝操作
echo 程序将退出
goto end
:sug1
echo 未找到拷贝文件
echo 程序将退出
goto end
:sug0
echo 拷贝文件成功!
goto end
:end
echo 2秒后退出
ping -n 2 127.0.0.1>nul
pause
exit
执行该批处理时,如果appData.xls 和它放在同一目录显示是:拷贝文件成功!
若是在其他地方,都会显示:
也就是if errorlevel 4 goto sug4这个判断语句
系统说明不是这样吗?
xcopy
0 成功拷贝文件 1 未找到拷贝文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 5 拷贝过程中写盘错误
在此处有疑问??,
第二,同样的语句做了以下修改
@echo off
setlocal enabledelayedexpansion
xcopy appData.xls e:\
if %errorlevel%==%5%(
echo 拷贝过程中写盘错误
goto end
)
if %errorlevel%==%4%(
echo 预制错误阻止文件拷贝操作
goto end
)
if %errorlevel%==%2%(
echo 用户通过ctrl-c终止拷贝操作
goto end
)
if %errorlevel%==%1%(
echo 未找到拷贝文件
goto end
)
if %errorlevel%==%0%(
echo 成功拷贝文件
goto end
)
:end
echo 3秒后将退出
ping -n 3 127.0.0.1>nul
pause
exit
自以为没问题,但是运行时却是一闪而过,实在是想不通哪里出错了,哎,请高人帮忙指点一下吧!
@ 巧虎星期六:
如您所说,第一段改成:if %errorlevel%==5 执行还是那样子显示,看样子系统判断后给的返回值 对应的解释与实际矛盾,明明应当是显示未找到拷贝文件,却是显示预制错误阻止文件拷贝操作
第二段改成:if %errorlevel%==5 这样执行还是闪退,后来我改成这样:
if errorlevel==5 echo 拷贝过程中写盘错误&goto end
执行结果和1是一样的,这()不知道哪里用的不对了,比较郁闷 展开
1个回答
展开全部
当使用if errorlevel 值 cmmand 句式时,它的含义是:如果返回的错误码值大于或等于值 的时候,将执行cmmand
操作;
当使用if %errorlevel%==值 cmmand 句式时,它含义是:如果返回的错误码值等于值 的时候,将执行cmmand操作。
第二段批处理当中,数字左右不要加%,%a%指的都是变量, %1%,批处理认为是一种错误的表达式,所以一闪退出
操作;
当使用if %errorlevel%==值 cmmand 句式时,它含义是:如果返回的错误码值等于值 的时候,将执行cmmand操作。
第二段批处理当中,数字左右不要加%,%a%指的都是变量, %1%,批处理认为是一种错误的表达式,所以一闪退出
追问
@巧虎星期六 :字数有点多,写不下,写在评论里了。。。
追答
第一段,脚本没有错,之所以会出现errorlevel 5和4的结果,一是因为脚本是顺序执行模式,二是因为“if errorlevel 值”这种写法的问题,我上面已经回复了。
【当使用if errorlevel 值 cmmand 句式时,它的含义是:如果返回的错误码值大于或等于值 的时候,将执行cmmand操作;】
第二段脚本,去掉setlocal enabledelayedexpansion这句话,去掉数值左右的百分号
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询