Board logo

标题: [文本处理] 批处理errorlevel返回两个值怎么回事? [打印本页]

作者: city_85    时间: 2011-4-6 11:12     标题: 批处理errorlevel返回两个值怎么回事?

upload.bat脚本,第一个脚本不知道为什么.老是返回两个errorlevel值0和1,怎么回事啊
  1. @echo off
  2. cd /d d:\web\"%1"
  3. attrib -s -h
  4. for %%a in (web.config,SPSideConfig.xml,KDOnlineLog.txt,images,iflyimages,TemplateFile) do attrib +s +h %%a
  5. del /q /f *.*
  6. for /d %%a in (*) do rd /s /q "%%a"
  7. for /f "delims=" %%a in ('dir /a /b') do attrib -h -s "%%a"
  8. xcopy /s/e/y/h/R  d:\update\%2\%3\%4   d:\web\%1 >>d:\iislog.txt
  9. cacls.exe d:\web\"%1"\TemplateFile /e /t /g "network service":F  >>d:\iislog.txt
  10. cacls.exe d:\web\"%1"\kdonlinelog.txt /e /t /g "network service":F >>d:\iislog.txt
  11. if errorlevel 0 echo 0
  12. if errorlevel 1 echo 1
复制代码
执行后upload.bat hk liang_04061025 uploadall online
目的可以达到,但是老是返回0和1,怎么回事呢?
  1. @echo off
  2. rd /q /s d:\web\%1\   >d:\iislog.txt
  3. mkdir d:\web\%1   >d:\iislog.txt
  4. xcopy /s/e/y/h/R  d:\update\%2\%3\%4   d:\web\%1 >>d:\iislog.txt
  5. copy /y  d:\web_bak\%2\%1\kdonlinelog.txt d:\web\%1\  >>d:\iislog.txt
  6. copy /y  d:\web_bak\%2\%1\web.config d:\web\%1\  >>d:\iislog.txt
  7. copy /y  d:\web_bak\%2\%1\spsideconfig.xml d:\web\%1\  >>d:\iislog.txt
  8. cacls.exe d:\web\%1\TemplateFile /e /t /g "network service":F  >>d:\iislog.txt
  9. cacls.exe d:\web\%1\kdonlinelog.txt /e /t /g "network service":F >>d:\iislog.txt
  10. if errorlevel 0 echo 0
  11. if errorlevel 1 echo 1
复制代码
目的可以达到,只返回0,这是我要的结果.
作者: TX_kakashi    时间: 2011-4-6 11:14

errorlevel只能判断一次,用if-else吧。
作者: hanyeguxing    时间: 2011-4-6 11:32

本帖最后由 hanyeguxing 于 2011-4-6 11:38 编辑

1,语法:if [not] errorlevel number command [else expression]
只有当由 Cmd.exe 运行的前一个程序返回大于或等于 number 的退出代码时,才能指定真条件。
你的错误认识发生在将此语法等同于 if %errorlevel% equ 0 和 if %errorlevel%==0 了
2,所以:
if errorlevel 0 echo 0
if errorlevel 1 echo 1
当返回为0时,第一个if成立第二个不成立所以只显示第一个;
当返回为1时,第一个if成立第二个也成立所以两个都显示。
3,如果只判断
存在大于0的返回:
if errorlevel 1 echo 有错误
if %errorlevel% gtr 0 echo 有错误
存在不为0的返回:
if %errorlevel% neq 0 echo 有错误
if not %errorlevel%==0 echo 有错误
存在大于或等于1的返回:
if errorlevel 1 echo 有错误
if %errorlevel% geq 1 echo 有错误
ps:并不是所有命令都有错误返回,也并不是所有错误返回都是大于0的。
作者: city_85    时间: 2011-4-6 11:38

还是有点模糊呢.那到底我两个脚本哪个对和错啊.但是事实两个脚本都是正确的啊
作者: hanyeguxing    时间: 2011-4-6 11:40

本帖最后由 hanyeguxing 于 2011-4-6 11:41 编辑

4# city_85
1,第一个脚本的错误:cd /d d:\web\"%1"
2,代码要使用[code]和[ /code]括起来,方便他们区分和复制
作者: city_85    时间: 2011-4-6 13:11

版主,你说我cd /d d:\web\"%1"这里错误吗?不会吧,怎么改啊,这个只是进入目录啊,我是初学者来的,谢谢提醒
作者: hanyeguxing    时间: 2011-4-6 13:20

6# city_85
cd /d d:\web\"%1"
你单独运行这个,看有错误提示没?
1,如果%1不带引号,则可以
cd /d "d:\web\%1"

cd /d d:\web\%1
2,如果%1带了引号,则
cd /d "d:\web\%~1"

cd /d d:\web\%~1
作者: wc726842270    时间: 2011-4-6 13:20

一般写代码时,errorlevel不都是从大到小么?(和版主的几乎是同一个意思)
作者: city_85    时间: 2011-4-6 14:14

明白了.谢谢
作者: city_85    时间: 2011-4-6 15:14

这里的版主个个都是大好人.




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