1. 程式人生 > >批處理命令學習筆記——If命令

批處理命令學習筆記——If命令

If 命令

表示將判斷是否符合規定的條件,從而決定執行不同的命令。有三種格式:

1、if [NOT]"引數" == "字串"  待執行的命令

引數如果等於(或者不等於)指定的字串,則條件成立,執行命令,否則執行下一句。(注意是兩個等號)
if "%1"=="a" format a: if {%1}=={} goto noparms
if {%2}=={} goto noparms
2、if [NOT] exist 檔名  待執行的命令

如果存在(或者不存在)指定的檔案,則條件成立,執行命令,否則執行下一句。
if exist config.sys edit config.sys 3、if [NOT] errorlevel 數字  待執行的命令


如果返回碼大於或者等於(或者小於,使用NOT)指定的數字,則條件成立,執行命令,否則執行下一句。
if errorlevel 2 goto x2
if errorlevel 1 goto x1 DOS程式執行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1。數字取值範圍0~255。判斷時值的排列順序應該由大到小,否則會出現非期望的結果,例如: if errorlevel 1 goto x1
if errorlevel 2 goto x2 後面的一行指令將永遠得不到執行,因為當errorlevel大於等於2時必然大於等於1。此外,IF ERRORLEVEL這條語句必須放在某一個命令後面,否則ERRORLEVEL這個變數的值可能會被新的命令覆蓋。 echo off
dir z:
rem 如果退出程式碼為1(不成功)就跳至標題1處執行
IF ERRORLEVEL 1 goto 1

rem 如果退出程式碼為0(成功)就跳至標題0處執行
IF ERRORLEVEL 0 goto 0

:0
echo 命令執行成功!
Rem 程式執行完畢跳至標題exit處退出
goto exit

:1
echo 命令執行失敗!
Rem 程式執行完畢跳至標題exit處退出
goto exit

:exit
Rem 這裡是程式的出口 值得注意的是,ELSE 子句必須在 IF 之後出現在同一行上。例如以下子句不會有效: IF EXIST filename. del filename.
ELSE echo filename. missing 但因為 del 命令需要用一個新行終止(可以同時刪除多個檔案),所以以下子句也不會有效: IF EXIST filename. del filename. ELSE echo filename. missing 要實現上述意圖,則必須採用下面的辦法: IF EXIST filename. (
  del filename.
) ELSE (
  echo filename. missing.
) 或者一定要使命令在同一行的話,則以下子句有效:
IF EXIST filename. (del filename.) ELSE echo filename. missing 如果命令副檔名被啟用,IF 會如下改變:
IF [/I] string1 compare-op string2 command
IF CMDEXTVERSION number command
IF DEFINED variable command 其中,比較運算子可以是:
  EQU   等於
  NEQ   不等於
  LSS   小於
  LEQ   小於或等於
  GTR   大於
  GEQ   大於或等於
及 /I 開關;如果該開關被指定,則說明要進行的字串比較不分大小寫。/I 開關可以用於 IF 的 string1==string2 的形式上。這些比較都是通用的;原因是,如果 string1 和 string2 都是由數字組成的,字串會被轉換成數字,進行數字比較。

CMDEXTVERSION 條件的作用跟 ERRORLEVEL 的一樣,除了它是在跟與命令副檔名有關聯的內部版本號比較。第一個版本是 1。每次對命令副檔名有相當大的增強時,版本號會增加一個。命令副檔名被停用時,CMDEXTVERSION 條件不是真的。

如果已定義環境變數,DEFINED 條件的作用跟 EXISTS 的一樣,除了它取得一個環境變數,返回的結果是 true。

如果沒有名為 ERRORLEVEL 的環境變數,%ERRORLEVEL%會擴充為 ERROLEVEL 當前數值的字串表示式;否則,您會得到其數值。執行程式後,以下語句說明 ERRORLEVEL 的用法:
goto answer%ERRORLEVEL%
:answer0
echo Program had return code 0
:answer1
echo Program had return code 1
您也可以使用以上的數字比較:
IF %ERRORLEVEL% LEQ 1 goto okay
如果沒有名為 CMDCMDLINE 的環境變數,%CMDCMDLINE%將在 CMD.EXE 進行任何處理前擴充為傳遞給 CMD.EXE 的原始命令列;否則,您會得到其數值。

如果沒有名為 CMDEXTVERSION 的環境變數,%CMDEXTVERSION% 會擴充為 CMDEXTVERSION 當前數值的字串符表示式;否則,您會得到其數值。