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和if可以實現乙個簡單的密碼判斷,當然這個密碼判斷可以很輕易地被破解,仔細動腦筋想一想,該怎麼破解呢.set /p pw=請輸入密碼:
if %pw%==bat (
echo yes!
) else (
rem [else] 為可選引數,表示否則,即如果變數pw等於bat則輸出yes!否則輸出no!
echo no!
)pause>nul
不過這個密碼判斷尚有不足之處,假如我們什麼都不輸入直接回車,便會提示錯誤,那該怎麼辦呢?很簡單,只要加上雙引號(其它的符號也行)就行了=>if 「%pw%」==「bat」
例:
這段**可以實現乙個簡單的判斷,不過尚有不足之處-----如果這兩個數字相等呢,這就要請出我們的else if啦(當然你也可以用幾個if來判斷)set /p num1=請第乙個輸入數字:
set /p num2=請第二個輸入數字:
if not %num1% lss %num2% (
rem lss表示小於
rem [not]為可選引數,表示非,即如果變數num1不小於變數num2就輸出第乙個數字大,否則輸出第二個數字大
echo 第乙個數字大
) else (
echo 第二個數字大
)pause>nul
------比較運算子-----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
例:
去掉第一行的set看看執行結果有什麼不同,你明白它的用法了嗎?@echo off
set var=aiwozhonghua
if defined var (
echo 變數var已被定義,它的值為%var%
) else (
echo 變數var沒有被定義
)pause>nul
要判斷返回值,首先要理解返回值是個什麼概念,批處理中的返回值一般表示了上個命令的執行結果(成功/失敗/等)
每個命令執行完畢後返回值都會做相應的更改,一般返回值為0表示成功,1表示失敗,有一些第三方的返回值比較特殊(如choice.exe,tmos.exe,cmos.exe),在這裡就不講解了
例:
這段**嘗試向%systemroot%\system32\寫入資料,如果許可權不夠或防毒軟體攔截就會寫入失敗,這時就會顯示"寫入失敗".不知道%systemroot%表示了什麼?單獨鍵入set自己仔細看一下結果.@echo off
echo;>>%systemroot%\test.txt
if errorlevel 0 ( echo 寫入成功! ) else echo 寫入失敗
pause>nul
不過看到後面你會發現這段**還有更簡便的寫法
注:用 if errorlevel判斷返回值時要將返回值從大到小排列
例:
goto@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
將 cmd.exe 導向到批處理程式中帶標籤的行。
goto label
label 指定批處理程式中用作標籤的文字字串。
標籤必須單獨一行,並且以冒號打頭。
如果命令副檔名被啟用,goto 會如下改變:
goto 命令現在接受目標標籤 :eof,這個標籤將控制轉移到當前
批指令碼檔案的結尾。不定義就退出批指令碼檔案,這是乙個容易的
辦法。有關能使該功能有用的 call 命令的副檔名描述,請鍵入
call /?。
label是什麼?這可不是命令label,它指的是標籤,標籤是啥?見例子
這是乙個更加完整的密碼判斷,仔細閱讀並執行這行**,現在你知道標籤是什麼了嗎,沒錯,那個:yes就是標籤了!例:
@echo off
set /p pw=請輸入密碼:
if "%pw%"=="bathome" goto yes
goto :eof
rem 未定義的:eof會退出指令碼檔案
:yes
echo 密碼正確!
pause>nul
標籤的格式
:標籤名
關掉回顯以後你有沒有發現什麼?沒錯,標籤所在的那一行沒有被執行,這就是為什麼::比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...