Board logo

标题: [文本处理] 【已解决】批处理中IF %ERRORLEVEL% == 0与 IF ERRORLEVEL 0区别 [打印本页]

作者: xushaolong2009    时间: 2009-4-13 17:53     标题: 【已解决】批处理中IF %ERRORLEVEL% == 0与 IF ERRORLEVEL 0区别

看了个if的教程,代码如下
  1.   
  2. @echo off
  3.    set /p var=随便输入个命令:
  4.    %var%
  5.    if %ERRORLEVEL% == 0  (
  6.    echo !var! 执行成功了
  7.    ) ELSE (
  8.    echo 基本上执行失败了..
  9.    )
  10.   pause
  11.    
复制代码
里面的代码大都看的懂除了第三行的%var%,有什么用?
  更大的疑惑还在于运行后,系统会自动根据输入的命令判断是不是命令(内部或外部??个人理解) 这是怎么产生的,好像代码里没有写有关提示的吧!

    还有个疑惑
  1.   @echo off
  2.   net user
  3.   IF %ERRORLEVEL% == 0 echo net user 执行成功了!
  4.   pause
  5.   
复制代码
教程上说如果换了   IF ERRORLEVEL 0 echo net user 执行成功了!   这句,不管上面的命令是否执行成功,结果都会认为是命令成功的。 可否有解决此现象的,或是为什么会这样???

[ 本帖最后由 xushaolong2009 于 2009-4-13 22:42 编辑 ]
作者: Batcher    时间: 2009-4-13 22:11

第三行的%var%作用就是执行一下用户输入的命令。

通常情况下,命令执行成功以后,系统变量ERRORLEVEL会被设置成0;如果命令失败,或者遇到非法命令,系统变量ERRORLEVEL会被设置成一个非0的数字。后面的if命令正式利用这一点来判断用户输入的是不是一个正确的命令。

IF ERRORLEVEL 0 的意思是 if %errorlevel% 大于等于 0,这个代码中是个不正确的用法,因为它无法真正的判断户输入的是不是一个正确的命令。

如果想知道一个命令运行之后,ERRORLEVEL的值到底是多少,可以在后面加个echo自己看看:
echo %errorlevel%
作者: xushaolong2009    时间: 2009-4-13 22:30     标题: 心得

感谢Batcher 斑竹的回答!
原来批出来运行时还有一个errorlevel值。可否这样理解。批处理正式利用这些errorlevel值来判断命令是否正确,若不正确则不执行,或是在屏幕上显示错误信息。如果前面命令没有执行正确,则影响了后面命令的执行,或者干脆停止执行直接退出,就像运行时窗口一闪而过?
作者: Batcher    时间: 2009-4-13 22:38     标题: 回复 3楼 的帖子

基本上可以这样理解
你可以随着批处理学习的不断深入来逐渐体会errorlevel的用法




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2