在 Windows 的
CMD(命令提示字元)中,條件式分歧處理是撰寫批次檔或進行邏輯控制時的關鍵功能。
以下是幾種常見且實用的條件處理方式,並附上範例與說明,接下來就透過說明及一些例子來學習吧。
目錄
{tocify} $title={目錄}
條件式分歧處理方式
Windows CMD 也可以和其他程式語言一樣,進行條件式的判斷,
以下就判斷式的撰寫方式進行說明。
由於撰寫的內容不再限於單行,而且程式碼需要執行的內容也變多。
如果需要撰寫判斷式時,建議做成.bat
批次檔來執行程式,會比較容易的多。
在進入範例之前:
1. 以下部分範例會用到以下註解,程式碼最後會加上pause
表示畫面暫停。
pause 是一個非常簡單卻實用的指令,
主要用來暫停批次檔的執行,等待使用者按任意鍵繼續。
2.
未使用註解或加上pause使畫面暫停的範例,請自行斟酌需要追加即可。
3. 另外,您可以在在批次檔的程式碼開頭撰寫 “
@echo off ” 。
此程式碼可防止之後寫的任何命令顯示在螢幕上。如果沒有撰寫,則每次執行操作時命令都會列印到螢幕上。
echo off 前方加上@ 是因為 echo off
文字還會殘留在畫面上,所以在前方加上@,以隱藏echo off 文字。
以下可以看看例子:
4. 另外,在範例中也會提到註解方式,說明如下 :
REM 為Windows CMD註解的方式,註解方式為 :
1. REM
或 rem
大小寫皆可
2. ::
雙冒號
前方的 @ 表示不將註解輸出到CMD的畫面上。
在簡單看完以上的說明,接下來就讓我們進到範例看看。
單一條件式分歧
IF判斷寫成單行的方式 :
Point!
IF 條件式 ( 滿足條件時進行處理 )
小括號內可放一條或多條指令,用分號或 & 連接。
範例1: 判斷檔案是否存在
IF EXIST "data.txt" echo 找到檔案 data.txt
在IF 後方加上 EXIST 表示 存在, 如果加上 NOT EXIST 表示不存在。
例如:
IF EXIST 條件式 (處理)
=> 如果存在...,則進行處理....
IF NOT EXIST 條件式 (處理) =>
如果不存在...,則進行處理...
範例執行結果如下 :
範例2: 判斷變數值
@REM 設定變數username,並設定值為admin
@SET username=admin
@IF "%username%"=="admin" echo 歡迎系統管理員
pause
If判斷式寫成多行的方式
Point!
IF 條件式 (
滿足條件時進行處理
)
範例1: 把文字輸出到檔案
IF NOT EXIST report.txt (
@REM 把哈囉我是測試資料 輸出到report的txt檔案
@REM 這時候如果沒有檔案 會建立該檔案
ECHO 哈囉! 我是測試資料! > report.txt
@REM 在畫面輸出訊息
ECHO 已建立 report.txt
@REM 程式暫停,提示按任意鍵繼續
pause
)
這裡再重複說明一次,
REM 為Windows
CMD註解的方式,註解方式如下 :
1. REM 或
rem
大小寫皆可
2. ::
雙冒號
前方的 @ 表示不將註解輸出到CMD的畫面上。
執行的結果如下,
在下方的部分,我先建立一個Test.bat的測試檔案,並將程式碼寫在其中,
注意 :
如果副檔名為.bat,點擊後會直接執行,可以使用滑鼠右鍵
> 選擇記事本或其他程式軟體撰寫。
如果 REM 前方不使用 @ , 則會在CMD
畫面出現註解內容。
If判斷式: 單條件式分歧
Point!
IF 條件式 (
滿足條件式時進行處理
) ELSE (
無法滿足條件式時的處理
)
範例1: 判斷使用者輸入 Y/N:
SET /P answer=是否要繼續?(Y/N):
IF /I "%answer%"=="Y" (
ECHO 程式開始執行...
) ELSE IF /I "%answer%"=="N" (
ECHO 程式已取消。
) ELSE (
ECHO 您輸入的資料無效。
)
If判斷式: 多條件式分歧
Point!
IF 條件式1 (
滿足條件式1時進行處理
) ELSE IF 條件式2 (
滿足條件式2時進行處理
) ELSE IF 條件式3 (
滿足條件式3時進行處理
) ... 以此類推
) ELSE (
無法滿足條件式時的處理
)
範例 1: 判斷成績等級
本次範例會使用到比較的演算子,使用說明如下:
演算子 | 說明 |
---|---|
EQU | 等於 (EQUal) |
NEQ | 不等於 (Not EQual) |
LSS | 小於 (LeSS than) |
LEQ | 小於或等於 (Less than or EQual) |
GTR | 大於 (GreaTeR than) |
GEQ | 大於或等於 (Greater than or EQual) |
SET /A score=75
IF %score% GEQ 90 (
ECHO 成績等級:優
) ELSE IF %score% GEQ 80 (
ECHO 成績等級:甲
) ELSE IF %score% GEQ 70 (
ECHO 成績等級:乙
) ELSE IF %score% GEQ 60 (
ECHO 成績等級:丙
) ELSE (
ECHO 成績不及格
)