BAT批處理檔案 if命令詳解

2021-09-19 13:53:25 字數 3568 閱讀 9375

if/?(2019.04.27)

執行批處理程式中的條件處理。

if [not] errorlevel number command

if [not] string1==string2 command

if [not] exist filename command

not 指定只有條件為 false 的情況下,windows 才應該執行該命令。

errorlevel number 如果最後執行的程式返回乙個等於或大於指定數字的退出**,指定條件為 true。

string1==string2 如果指定的文字字串匹配,指定條件為 true。

exist filename 如果指定的檔名存在,指定條件為 true。

command 如果符合條件,指定要執行的命令。如果指定的條件為 false,命令後可跟 else 命令,該命令將在 else 關鍵字之後執行該命令。

else 子句必須出現在同一行上的 if 之後。例如:

if exist filename. (

del filename.

) else (

echo filename. missing.

)

例:

set /p pw=請輸入密碼:

if %pw%==bat (

echo yes! 

) else (

rem [else] 為可選引數,表示否則,即如果變數pw等於bat則輸出yes!否則輸出no! 

echo no! 

)pause>nul

通過set /p和if可以實現乙個簡單的密碼判斷,當然這個密碼判斷可以很輕易地被破解,仔細動腦筋想一想,該怎麼破解呢.

不過這個密碼判斷尚有不足之處,假如我們什麼都不輸入直接回車,便會提示錯誤,那該怎麼辦呢?很簡單,只要加上雙引號(其它的符號也行)就行了=>if 「%pw%」==「bat」

例:

set /p num1=請第乙個輸入數字:

set /p num2=請第二個輸入數字:

if not %num1% lss %num2% (

rem lss表示小於

rem [not]為可選引數,表示非,即如果變數num1不小於變數num2就輸出第乙個數字大,否則輸出第二個數字大

echo 第乙個數字大

) else (

echo 第二個數字大

)pause>nul

這段**可以實現乙個簡單的判斷,不過尚有不足之處-----如果這兩個數字相等呢,這就要請出我們的else if啦(當然你也可以用幾個if來判斷)

set /p num1=請第乙個輸入數字:

set /p num2=請第二個輸入數字:

if "%num1%" gtr "%num2%" (

echo 第乙個數字大

) else if "%num1%" equ "%num2%" (

echo 一樣大

) else (

echo 第二個數字大 

)pause>nul

------比較運算子-----

equ - 等於

neq - 不等於

lss - 小於

leq - 小於或等於

gtr - 大於

geq - 大於或等於

例:

@echo off

if exist c:\windows (

echo 你的c盤有windows檔案(夾^)

) else (

echo 你的c盤沒有windows檔案(夾^)

)pause>nul

"^"為轉義符號,在特殊符號一節再作講解

例:

@echo off

set var=aiwozhonghua

if defined var (

echo 變數var已被定義,它的值為%var% 

) else (

echo 變數var沒有被定義

)pause>nul

去掉第一行的set看看執行結果有什麼不同,你明白它的用法了嗎?

要判斷返回值,首先要理解返回值是個什麼概念,批處理中的返回值一般表示了上個命令的執行結果(成功/失敗/等)

每個命令執行完畢後返回值都會做相應的更改,一般返回值為0表示成功,1表示失敗,有一些第三方的返回值比較特殊(如choice.exe,tmos.exe,cmos.exe),在這裡就不講解了

例:

@echo off

echo;>>%systemroot%\test.txt

if errorlevel 0 ( echo 寫入成功! ) else echo 寫入失敗

pause>nul

這段**嘗試向%systemroot%\system32\寫入資料,如果許可權不夠或防毒軟體攔截就會寫入失敗,這時就會顯示"寫入失敗".不知道%systemroot%表示了什麼?單獨鍵入set自己仔細看一下結果.

不過看到後面你會發現這段**還有更簡便的寫法

注:用 if errorlevel判斷返回值時要將返回值從大到小排列

例:

@echo off

choice /c:abc /n "a/b/c"

if errorlevel 3 echo you choose the c

if errorlevel 2 echo you choose the b

if errorlevel 1 echo you choose the a

pause>nul

goto

將 cmd.exe 導向到批處理程式中帶標籤的行。

goto label

label 指定批處理程式中用作標籤的文字字串。

標籤必須單獨一行,並且以冒號打頭。

如果命令副檔名被啟用,goto 會如下改變:

goto 命令現在接受目標標籤 :eof,這個標籤將控制轉移到當前

批指令碼檔案的結尾。不定義就退出批指令碼檔案,這是乙個容易的

辦法。有關能使該功能有用的 call 命令的副檔名描述,請鍵入

call /?。

label是什麼?這可不是命令label,它指的是標籤,標籤是啥?見例子

例:

@echo off

set /p pw=請輸入密碼:

if "%pw%"=="bathome" goto yes

goto :eof

rem 未定義的:eof會退出指令碼檔案

:yes

echo 密碼正確!

pause>nul

這是乙個更加完整的密碼判斷,仔細閱讀並執行這行**,現在你知道標籤是什麼了嗎,沒錯,那個:yes就是標籤了!

標籤的格式

:標籤名

關掉回顯以後你有沒有發現什麼?沒錯,標籤所在的那一行沒有被執行,這就是為什麼::比rem更快的原因了,但是標籤不能被使用在乙個語句的內部,主要就是被括號括起來的語句(是的,被括號括起來的語句被看作乙個整體),因此::的相容性沒有rem那麼好

附:"::"其實就是不規範的標籤名…

參考:

bat檔案(批處理檔案),批處理命令!!!

批處理 batch 也稱為批處理指令碼。顧名思義,批處理就是對某物件進行批量的處理,通常被認為是一種簡化的指令碼語言,它應用於dos和windows系統中。批處理是由dos或者windows系統內嵌的命令直譯器 通常是command.com或者cmd.exe 解釋執行。類似於unix系統中的shel...

bat批處理檔案

你在1.bat檔案裡寫上 echo 1 g 最終效果是 1.bat echo 1 g 即,bat檔案裡的每一行都會出現在命令列裡!如果不想顯示在命令列裡 1,要麼bat檔案裡,每一行前面都加上 表示這個命令不顯示在命令列裡 2,要麼在bat檔案開頭,寫echo off 下面的命令 都不會出現在命令列...

BAT批處理檔案 assoc,ftype命令詳解

assoc 設定 39 副檔名 關聯,關聯到 檔案型別 ftype 設定 39 檔案型別 關聯,關聯到 執行程式和引數 當你雙擊乙個.txt檔案時,windows並不是根據.txt直接判斷用 notepad.exe 開啟 而是先判斷.txt屬於 txtfile 39 檔案型別 再呼叫 txtfile...