Windows系統bat批處理特殊命令(二)
2022-12-02由 科技之鷹 發表于 農業
dos怎麼成批處理檔案
四、特殊命令
1、if 命令
(1)格式:if [not] exist [ 路徑 /]檔名 待執行的命令
如果有指定的檔案,則條件成立,執行命令,否則執行下一句。
eg: if exist c:/config。sys type c:/config。sys //表示如果存在c:/config。sys 檔案,則顯示它的內容
(2)格式: if errorlevel < 數字 > 待執行的命令
很多 DOS程式在執行結束後會返回一個數字值用來表示程式執行的結果(或者狀態 ),透過 if errorlevel 命令可以判斷程式的返回值,根據不同的返回值來決定執行不同的命令 ( 返回值必須按照從大到小的順序排列 )。如果返回值等於指定的數字,則條件成立,執行命令,否則執行下一句。IF ERRORLEVEL是用來測試它的上一個 DOS命令的返回值的,注意只是上一個命令的返回值,而且返回值必須依照從大到小次序順序判斷。如下的例子,先判斷返回值為 1 的,再判斷返回值為 0 的。
eg: IF ERRORLEVEL1 ECHO 檔案複製失敗
eg: IF ERRORLEVEL0 ECHO 成功複製檔案
(3) if number 比較符 value command
== 等於
EQU 等於
NEQ 不等於
LSS 小於
LEQ 小於或等於
GTR 大於
GEQ 大於或等於
(4)if defined test command //如果定了了變數 test,則執行 command。
eg: if defined test echo It is defined。
(5)if 條件 1 (command1) else (command2) // 條件 1 後的命令列必須有括號。
在 if 後,若要執行多條命令,可以將這些命令放在一對括號中,且左括號必須跟 if 關鍵字在同一行,如:
cd /d :/slfslfsl
if errorlevel 1 (
mkdir d:\error
mkdir d:\1
mkdir d:\2)
2、 goto 命令
批處理檔案執行到這裡將跳到 goto 所指定的標號 (標號即 label , 標號用 : 後跟標準字串來定義 ) 處, goto 語句一般與 if 配合使用, 根據不同的條件來執行不同的命令組。
如: goto end
:end
echo this is the end
標號用 “:字串 ” 來定義,標號所在行不被執行。在有多個標號時,每個標號都要有 goto 語句跳出,否則各個標號程式會連續執行。
3、 for 命令:
對一個或一組檔案,字串或命令結果中的每一個物件執行特定命令,達到我們想要的結果。注意:在批處理檔案中使用 FOR命令時,指定變數請使用 %%variable,而不要用 %variable。變數名稱是區分大小寫的,所以 %i 不同於 %I。
格式:FOR [引數 ] %%變數名 IN (相關檔案或命令) DO執行的命令
for 命令可以帶引數或不帶引數,帶引數時支援以下引數 :/d /l /r /f 語法:
(1) 不帶引數:
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一個單一字母可替換的引數。
(set) 指定一個或一組檔案。 可以使用萬用字元。 //不帶引數時, 只指檔案。
command 指定對每個檔案執行的命令。
command-parameters 為特定命令指定引數或命令列開關。
DO後面可以跟 if 等其他命令,需要用 () 括起來。
eg :
for %%i in (t*。*) do echo %%i —— 顯示當前目錄下與 t*。* 相匹配的檔案 (只顯示檔名,不顯示路徑 )
for %%i in (d:\mydocuments\*。doc) do @echo %%i —— 顯示該目錄下與 *。doc 相匹配的檔案
(2) 帶有引數時:
1) 引數 /d (引數只能顯示當前目錄下的目錄名字 )
格式:FOR /D %variable IN (set) DO command [command-parameters]
這個引數主要用於目錄搜尋 ,不會搜尋檔案 ,/D 引數只能顯示當前目錄下的目錄名字。(特別說明:只會搜尋指定目錄下的目錄,不會搜尋再下一級的目錄。 )
for /d %%i in (c:\*) do echo %%i —— 顯示 c 盤根目錄下的所有目錄
for /d %%i in (???) do echo %%i —— 顯示當前目錄下名字只有 1-3 個字母的目錄
2) 引數 /R (搜尋指定路徑及所有子目錄中與 set 相符合的所有檔案 )
格式:FOR /R [[drive:]path] %variable IN (set) DO co mmand [command-parameters] 此命令會搜尋指定路徑及所有子目錄中與set 相符合的所有檔案,注意是指定路徑及所有子目錄。set 中的檔名如果含有萬用字元 (?或 *) , 則列舉 /R 引數指定的目錄及其下面的所有子目錄中與 set 相符合的所有檔案, 無相符檔案的目錄則不列舉。
3) 引數 /L (該集表示以增量形式從開始到結束的一個數字序列。可以使用負的 Step)
格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
for /l %%i in (1,1,5) do @echo %%i ——輸出 1 2 3 4 5// 從1 開始,遞增1,最大值為5
4) 引數 /F(主要用來處理檔案內容或命令的輸出結果, /F 預設將每行作為一個元素來處理。)
格式:FOR /F [“options”] %%i IN (file) DO command // file 代表一個或多個檔案。 for 會依次將file 中的檔案開啟,並且在進行到下一個檔案之前將每個檔案讀取到記憶體,將每行作為一個的元素,
%%i代表這個元素。忽略空白的行。
FOR /F [“options”] %%i IN (“string”) DO command // string 代表字串
FOR /F [“options”] %%i IN (‘command’) DO command // command 代表命令。命令列需要用單引號。
[“options”] 可選
4、 set 命令:設定變數
(1) set 顯示環境變數
set 會顯示當前所有的系統環境變數
set c 會顯示所有以 c 或 C開頭的變數。 ( 即:不區分大小寫 )
set com 顯示所有以 com或 Com開頭的變數
(2) set 設定環境變數
如:set str=ok // 就是將變數 str 的值設定成字串“ OK”注:如果在變數值中有特殊字元,則 set 後面的表示式需要用雙引號括起來。如: set “str=ok> ”
(3) 帶引數 /a 的 set 數值計算
set 的/A 引數就是讓 SET可以支援數學符號進行加減等一些數學運算 。支援的數學運算包含(優先權遞減) :
() // 分組
! ~ // 一元運算子
* / % // 算數運算子
+ // 算數運算子
<<>> // 邏輯移位
& // 按位“與”
^ // 按位“異”
| // 按位“或”
= *= /= %= += -= // 賦值
&= ^= |= <<= >>=
, // 表示式分隔符
如: set /a var=10-2 // 結果: var=8 ,如果沒有 /a ,則 var 的值是字串 10-2
set /a var=2*2
set /a var=2/2
set /a var=(1+1)+(1+1)
set /a a=1+1,b=2+1,c=3+1 // 使用“,”將表示式分隔。
echo %a% %b% %c%
注意:邏輯運算子和取餘運算子需要用雙引號括起來 , 如:
set /a var=1 “&” 1
set /a var=1 “%” 1
set /a var=2 “<<” 2
(4) 帶引數 /p 的 set 命令:允許變數值是使用者的輸入行
如:set /p str=Please input you string。
echo Your input is: %str%。
注意: set /p 的特殊用法set /p=A // 直接顯示等號後面的內容,相當於 echo A。 但是顯示內容後需要手動按回車鍵後才能繼續執行下一條語句。set /p=A @echo off for /l %%i in (1 1 300) do ( set /p=O for /l %%ain (1 1 280) do ver>null) // 利用 for 迴圈執行 ver>null 來達到延時的目的。其中 ver 是顯示當前命令列視窗版本的命令。也可以將 var 換位 help,time /t 等其他命令。 pause>null (5) 字串擷取 格式: set a=%var:~start,len% // 從變數 var 的值的 start 位開始擷取, 一共擷取 len 位。若 start 或 len 為負數,表示從倒數第幾位開始擷取或擷取倒數幾位。位數的表示是從 0 開始的。 @echo off set var=www。baidu。com set a=%var:~1,2% echo %a% pause>null 從第 1 位( 也即第二個字元 ) 開始,擷取 2 個字元。 %var:~5% // 從第 6 開始,擷取剩下所有字元。 %var:~-3% // 擷取倒數 3 位 %var:~0,-len% // 擷取從第一位開始,倒數第 len 位結束的字元。 eg: @echo off ::以“YYYYMMDD”格式取出當前時間。 set BACKUPDATE=%date:~0,4%%date:~5,2%%date:~8,2%