DOS批處理

DOS批處理命令-if語句

IF語句是批處理中執行的條件分歧處理。

批處理中,IF分歧的寫法有好幾種,接下來,我們來一個一個的分析IF語法的結構。

1、IF [NOT] ERRORLEVEL 番號 批處理命令

當ERRORLEVEL的值大於等於指定的番號的值時,執行指定的批處理命令。

複製代碼
@echo off

call :called0
IF ERRORLEVEL 100 (
    echo ERRORLEVEL = %ERRORLEVEL%
)

call :called1
IF ERRORLEVEL 100 (
    echo ERRORLEVEL = %ERRORLEVEL%
)

call :called2
IF ERRORLEVEL 100 (
    echo ERRORLEVEL = %ERRORLEVEL%
)

exit /b 200

:called0
SETLOCAL
    echo called0
    exit /b 99
ENDLOCAL

:called1
SETLOCAL
    echo called1
    exit /b 100
ENDLOCAL

:called2
SETLOCAL
    echo called2
    exit /b 101
ENDLOCAL
複製代碼

運行的結果爲:

C:\Users\liuhongying>F:\tmp\a.bat

called0
called1
ERRORLEVEL = 100
called2
ERRORLEVEL = 101

發現,在返回值跟100比的時候,只有等於100和大於100的時候,執行到了下面的批處理命令,而在99的時候,就沒有執行批處理命令,這個測試你結果,你就應該明白了吧!

 

2、IF [NOT] 文字列1==文字列2 批處理命令

這個判斷是比較文字列1和文字列2是不是相等,如果是變量,就要用%來取出變量的值來比較。

IF [/I] [NOT] 文字列1==文字列2 批處理命令

有一個控制開關,/I,是控制比較的時候是不是忽略大小寫。如果有/I這個開關存在的時候,比較的時候就會忽略大小寫去比較。

看看下面這個例子,你就 應該全部明白了。

複製代碼
@echo off

IF abcdef==abcdef (
    echo abcdef==abcdef
)

IF AbCdEF==abcdef (
    echo AbCdEF==abcdef
)

IF /I ABCDEF==abcdef (
    echo ABCDEF==abcdef
)

IF /I AbCdEF==abcdef (
    echo AbCdEF==abcdef
)
複製代碼

F:\tmp>a.bat
abcdef==abcdef
ABCDEF==abcdef
AbCdEF==abcdef

 

3、IF [NOT] EXIST 文件名 批處理命令

幫助上面寫的是判斷文件名是否存在,其實,這個判斷方法既可以判斷文件是否存在,又可以判斷路徑是不是存在。

複製代碼
@echo off

IF EXIST F:\tmp\a.bat (
    echo EXIST:F:\tmp\a.bat
)

IF EXIST F:\tmp (
    echo EXIST:F:\tmp
)
複製代碼

執行結果:

F:\tmp>a.bat
EXIST:F:\tmp\a.bat
EXIST:F:\tmp

4、IF [/I] 文字列1 比較演算子 文字列2 批處理命令

對文字列1和文字列2按照比較演算子進行比較,比較結果爲真的時候,就執行批處理命令指定的處理。

下面對幾種比較演算子進行進行介紹。

EQU - 等於(等しい)
NEQ - 不等於(等しくない)
LSS - 小於(より小さい)
LEQ - 小於等於(以下)
GTR - 大於(より大きい)
GEQ - 大於等於(以上)

下邊這個例子,對這幾個判斷符進行解說

複製代碼
@echo off

echo EQU
IF a EQU a (
    echo a EQU a
)

IF a EQU b (
    echo a EQU b
)

echo NEQ
IF a NEQ a (
    echo a NEQ a
)

IF a NEQ b (
    echo a NEQ b
)

echo LSS
IF a LSS a (
    echo a LSS a
)

IF a LSS b (
    echo a LSS b
)

IF b LSS a (
    echo b LSS a
)

echo LEQ
IF a LEQ a (
    echo a LEQ a
)

IF a LEQ b (
    echo a LEQ b
)

IF b LEQ a (
    echo b LEQ a
)

echo GTR
IF a GTR a (
    echo a GTR a
)

IF a GTR b (
    echo a GTR b
)

IF b GTR a (
    echo b GTR a
)

echo GEQ
IF a GEQ a (
    echo a GEQ a
)

IF a GEQ b (
    echo a GEQ b
)

IF b GEQ a (
    echo b GEQ a
)
複製代碼

運行結果爲:

F:\tmp>a.bat
EQU
a EQU a
NEQ
a NEQ b
LSS
a LSS b
LEQ
a LEQ a
a LEQ b
GTR
b GTR a
GEQ
a GEQ a
b GEQ a

 

5、IF CMDEXTVERSION 番號 批處理命令

最初的CMDEXTVERSION的值是1,當擴展命令可以使用的時候,CMDEXTVERSION的值就比1大了。

並且,當擴張技能無效的時候,這個表達式命題恆爲假。

更加具體的作用,這裏不去探討了,如果以後有需要,用到了,在去追加吧!

 

6、IF DEFINED 変數 批處理命令

如果指定的變數定義的時候,就執行批處理命令指定的處理。更加準確的描述應該是,指定的便是的值是空的時候,句執行批處理命令指定的處理。

複製代碼
@echo off

set var1=abc
set var3=
set var4=   

IF DEFINED var1 (
    echo DEFINED var1
)

IF DEFINED var2 (
    echo DEFINED var2
)

IF DEFINED var3 (
    echo DEFINED var3
)

IF DEFINED var4 (
    echo DEFINED var4
)
複製代碼

*var3=後面是沒有設置空格

*var4=後面是設置空格的

運行結果爲:

F:\tmp>a.bat
DEFINED var1
DEFINED var3

 

PS:以上的語法介紹中,都沒有詳細介紹另個重要點

A:所有加[NOT]的地方,如果加了NOT以後,就將判斷的調節取反。

B:所有的命令都沒有介紹else的語法,所有的IF判斷,都是可以再行後最佳【else 批處理命令】,也就是說,當判斷條件不成立的時候,執行批處理命令指定的處理。

  更推薦的寫法是,所有批處理命令都加上小括號,如下述結果

IF 條件 (
    條件爲真的時候的處理
) else (
    條件爲假的時候的處理
)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章