[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理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,这是我要的结果.

errorlevel只能判断一次,用if-else吧。
天道酬勤

TOP

本帖最后由 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的。
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

还是有点模糊呢.那到底我两个脚本哪个对和错啊.但是事实两个脚本都是正确的啊

TOP

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

4# city_85
1,第一个脚本的错误:cd /d d:\web\"%1"
2,代码要使用[code]和[ /code]括起来,方便他们区分和复制
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

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

TOP

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
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

一般写代码时,errorlevel不都是从大到小么?(和版主的几乎是同一个意思)
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

明白了.谢谢

TOP

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

TOP

返回列表