[批处理命令一日一教学](4)条件判断:if
[一日一教学]批处理系列帖子索引 [url]http://www.bathome.net/thread-2576-1-1.html[/url]标题:一日一教学系列4_条件判断:if
首发地址:[url]http://bbs.bathome.net/thread-2530-1-1.html[/url]
发表日期:2008.11.14
更新日期:无
上一篇:内容重定向:>和>> [url]http://bbs.bathome.net/thread-2516-1-1.html[/url]
下一篇:流程跳转:goto [url]http://bbs.bathome.net/thread-2574-1-1.html[/url]
if用于条件判断,适用于以下情形:
1、判断驱动器、文件或文件夹是否存在,用 if exist 语句;
2、判断某两个字符串是否相等,用 if "字符串1"=="字符串2" 语句;
3、判断某两个数值是否相等,用 if 数值1 equ 数值2 语句;
4、判断某个变量是否已经被赋值,用 if defined str 语句;
if语句的完整格式是这样的:if 条件表达式 (语句1) else (语句2),它的含义是:如果条件表达式成立,那么,就执行语句1,否则,将执行语句2。
对于以上四种情形,可以分别使用如下代码:
1、if exist d:\test.txt (echo D盘下有test.txt存在) else (echo D盘下不存在test.txt)
2、if "abc"=="xyz" (echo 字符串abc等于字符串xyz) else (echo 字符串abc不等于字符串xyz)
3、if 1 equ 2 (echo 1等于2) else (echo 1不等于2)
4、if defined str (echo 变量str已经被赋值,其值为%str%) else (echo 变量str的值为空)
判断字符串是否相等的时候,if会区分大小写,比如,单纯的if语句会认为字符串abc和字符串Abc不相同,若不想区分大小写,则需要添加 /i 开关,使用 if /i "字符串1"=="字符串2" 的格式;另外,等于符号是连续的"=="而非单独的"="。
判断两个数值之间的大小关系,除了等于用equ之外,还有其他的关系符号,所有适用于if语句的关系符号见下表:
[table=50%][tr][td][align=center][b]中文含义 [/b][/align][/td][td][align=center][b]关系符[/b][/align][/td][td][align=center][b]英文解释[/b][/align][/td][/tr][tr][td][align=center]等于[/align][/td][td][align=center]equ[/align][/td][td][align=center]equal[/align][/td][/tr][tr][td][align=center]大于[/align][/td][td][align=center]gtr[/align][/td][td][align=center]greater than[/align][/td][/tr][tr][td][align=center]大于或等于[/align][/td][td][align=center]geq[/align][/td][td][align=center]greater than or equal[/align][/td][/tr][tr][td][align=center]小于[/align][/td][td][align=center]lss[/align][/td][td][align=center]less than[/align][/td][/tr][tr][td][align=center]小于或不等于[/align][/td][td][align=center]leq[/align][/td][td][align=center]less than or equal[/align][/td][/tr][tr][td][align=center]不等于[/align][/td][td][align=center]neq[/align][/td][td][align=center]no equal[/align][/td][/tr][/table]
if语句还有一个精简格式:if 条件表达式 语句,它的含义是:如果条件表达式成立,将执行语句,否则,什么也不做。
多层 if 嵌套的语法举例:[code]if exist a.txt (
if exist 1.txt (
echo 存在 a.txt 和 1.txt
) else (
echo 存在 a.txt 但是不存在 1.txt
)
) else if exist b.txt (
echo 不存在 a.txt 但是存在 b.txt
) else (
echo 不存在 a.txt 和 b.txt
)[/code] 建议楼主在文章的两头添加[code][/code]
写个例子,便于大家理解
[code]@echo off@mode con cols=40 lines=17
if exist c:\1.txt start cmd.exe&&echo 存在1.txt
echo.&echo.&echo.&echo.
pause[/code]
回复 2楼 的帖子
加上code以后,虽然便于大家复制,但是不利于排版。 [quote]判断某两个数值是否相等,用 if 数值1 equ 数值2 语句;[/quote]注意进制。[code]if 017 equ 15 echo YES
if 0x34 equ 52 echo YES
if 045 equ 0x25 echo YES
pause>nul[/code] 1. else 好像必须和if写在同一行,不然报错,因为CMD把else当作一条命令了。
2. else 后面的代码和( )括号好像都得单独一行
不知道说得对不对。
回复 6楼 的帖子
[code]@echo offif exist C:\Batcher.txt (
echo 哈哈
) else (
echo 嘿嘿
)
pause[/code] 那个leq的中文含义应该是“小于或等于”吧,LZ貌似写错了。 [quote]原帖由 [i]nanyi[/i] 于 2008-12-22 12:31 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=17616&ptid=2530][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
那个leq的中文含义应该是“小于或等于”吧,LZ貌似写错了。 [/quote]
确实是小于或等于
没看懂 能教一下吗?
比如 我需要判断输入0 1 2 等数值 来决定执行什么命令那我该怎么写?
大家别见笑哈,帮我该一下使得此批处理能成功执行
[code]@echo offset /p s=请输入1 或 2
echo %s%
if "s"=="1" goto a
if "s"=="2" goto b
:a
echo 你输入的是1
pause
exit
:b
echo 你输入的是2
pause
exit[/code] 你的代码可以执行啊 ? 有什么问题吗? [quote]原帖由 [i]xiong8707[/i] 于 2008-12-25 20:45 发表 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=17804&ptid=2530][img]http://bbs.bathome.net/images/common/back.gif[/img][/url]
@echo off
set /p s=请输入1 或 2
echo %s%
if "s"=="1" goto a
if "s"=="2" goto b
:a
echo 你输入的是1
pause
exit
:b
echo 你输入的是2
pause
exit [/quote][code]@echo off
set /p s=请输入1 或 2
echo %s%
if %s% equ 1 goto a
if %s% equ 2 goto b
:a
echo 你输入的是1
pause
exit
:b
echo 你输入的是2
pause
exit[/code] 我也来一个,哈哈…………
[code]@echo off
set mode con lines=30
:0
cls
echo.#######################################
echo.投票:
echo. 1、楼主的贴子写得好;
echo. 2、楼主的贴子写得一般般;
echo. 3、楼主的贴子写得不啥的。
echo.#######################################
echo.
set no=:
set /p no= 请选择:
set "no=%no:"=%"
if "%no%"==":" goto 0
if "%no%"=="1" goto 1
if "%no%"=="2" goto 2
if "%no%"=="3" goto 3
if "%no%"=="0" goto 0
goto 0
:1
cls
echo.哈哈,你太英名了!!!
pause>nul
goto 0
:2
cls
echo.哟,你太客气了!!!
pause>nul
goto 0
:3
cls
echo.你眼神不好!!!要不你来写一个更好的!
pause:nul
goto exit
:exit
exit[/code] 都是高手,看着挺费劲! 不错 分享了 谢谢了
顶一个~
支持...我顶.. 楼主的贴子写得好 呵呵,有点晕。看来不能急进,要一点点学。 @echo off
菜鸟,完全看不懂啊······ 在网上搜的资料不怎么好,今天看到楼主的教程 ,呵呵 一看就懂 ,对我们新手来说这样的教程是最好的。 这一篇看不懂了,不知楼主有什么高招让我们这些菜鸟能消化这一课...
回复 3楼 的帖子
不知这是什么意思了?一点都看不懂[code]@echo off@mode con cols=40 lines=17
if exist c:\1.txt start cmd.exe&&echo 存在1.txt
echo.&echo.&echo.&echo.
pause[/code]似乎和前面学的两课挂不上钩,如果楼主能对每一项做一个详解就好了!先谢谢....
例如:@echo off是什么意思?
@mode con cols=40 lines=17 又是什么意思?
如果能用中文解释一下每一行的意思就好 写得比较祥细
前面输入1和2应该加入简易判断!要不输入3就出错!(个人意见)
[code]@echo off:c
set /p s=请输入1 或 2
echo 你输入的为%s%
if %s%==1 goto a
if %s%==2 goto b
echo 输入错误,请按要求输入!
pause>nul
cls
goto c
:a
echo 你输入的是1 符合要求
pause
exit
:b
echo 你输入的是2 符合要求
pause
exit[/code] 向高手们学习!努力提高自己! 流程跳转:goto [url]http://bbs.bathome.net/topicadmin.php?tid=2574[/url]
批处理之家 提示信息
对不起,您没有权限使用管理功能。
老大,处理下,看不到教程了。。 以前看的时候看不懂。。现在能看懂了 有些还是不怎么懂,慢慢学吧 楼主举2个实例啊 感觉这课没怎么懂