農林漁牧網

您現在的位置是:首頁 > 農業

Windows系統bat批處理特殊命令(二)

2022-12-02由 科技之鷹 發表于 農業

dos怎麼成批處理檔案

Windows系統bat批處理特殊命令(二)

四、特殊命令

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%