用批處理命令----for,if,call,errorlevel,start
Sample:
批量移動檔案,並顯示移動了那些檔案,成功和失敗顯示不同的提示資訊。
eMuleOk.bat:http://download1.csdn.net/down3/20070518/18220919835.bat
movefile.bat:http://download1.csdn.net/down3/20070518/18221049118.bat
eMuleOk.bat
@echo off
@echo move start
for /r f:eMule %%i in (*.*) do call movefile %%i f:download
if not errorlevel 0 @echo move failed!
if errorlevel 0 @echo move successfully
@echo on
@pause
movefile.bat
@move %1 %2
@echo move successfully:%1
If 命令
if 表示將判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式:
1、if "參數" == "字串" 待執行的命令
參數如果等於指定的字串,則條件成立,運行命令,否則運行下一句。(注意是兩個等號)
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
2、if exist 檔案名稱 待執行的命令
如果有指定的檔案,則條件成立,運行命令,否則運行下一句。
如if exist config.sys edit config.sys
3、if errorlevel / if not errorlevel 數字 待執行的命令
如果返回碼等於指定的數字,則條件成立,運行命令,否則運行下一句。
如if errorlevel 2 goto x2
DOS程式運行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1。
for 命令
for 命令是一個比較複雜的命令,主要用於參數在指定的範圍內迴圈執行命令。
在批次檔中使用 FOR 命令時,指定變數請使用 %%variable
for {%variable %%variable} in (set) do command [ CommandLineOptions]
%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組檔案。可以使用萬用字元。
command 指定對每個檔案執行的命令。
command-parameters 為特定命令指定參數或命令列開關。
在批次檔中使用 FOR 命令時,指定變數請使用 %%variable
而不要用 %variable。變數名稱是區分大小寫,所以 %i 不同於 %I
如果命令副檔名被啟用,下列額外的 FOR 命令格式會受到
支援:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含萬用字元,則指定與目錄名匹配,而不與檔案名稱匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-
檢查以 [drive:]path 為根的分類樹,指向每個目錄中的FOR 語句。如果在 /R 後沒有指定目錄,則使用目前的目錄。如果集僅為一個單點(.)字元,則枚舉該分類樹。
FOR /L %variable IN (start,step,end) DO command [command-para
該集表示以增量形式從開始到結束的一個數字序列。
因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生
序列 (5 4 3 2 1)。
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command
或者,如果有 usebackq 選項:
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (command) DO command
filenameset 為一個或多個檔案名稱。繼續到 filenameset 中的
下一個檔案之前,每份檔案都已被開啟、讀取並經過處理。
處理包括讀取檔案,將其分成一行行的文字,然後將每行
解析成零或更多的符號。然後用已找到的符號字串變數值
調用 For 迴圈。以預設,/F 通過每個檔案的每一行中分開
的第一個空白符號。跳過空白行。您可通過指定可選 "options"
參數替代預設解析操作。這個帶引號的字串包括一個或多個
指定不同解析選項的關鍵字。這些關鍵字為:
eol=c - 指一個行注釋字元的結尾(就一個)
skip=n - 指在檔案開始時忽略的行數。
delims=xxx - 指分隔字元集。這個替換了空格和跳格鍵的
預設分隔符號集。
tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代
的 for 本身。這會導致額外變數名稱的
格式為一個範圍。通過 nth 符號指定 m
符號字串中的最後一個字元星號,
那麼額外的變數將在最後一個符號解析之
分配並接受行的保留文本。
usebackq - 指定新文法已在下類情況中使用:
在作為命令執行一個後引號的字串並且引號字元為文字字串命令並允許在 fi中使用雙引號擴起檔案名稱。
START 命令
啟動另一個視窗運行指定的程式或命令。
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOW
[/WAIT] [/B] [command/program]
[parameters]
"title" 在視窗標題列中顯示的標題。
path 起始目錄
B 在不建立新視窗的情況下開始應用程式。 除非
啟動 ^C 處理,否則該應用程式會忽略 ^C 處理;
^Break 是唯一可以中斷該應用程式的方式
I 新環境是傳遞給 cmd.exe 的原始環境,
而不是當前環境
MIN 開始時視窗最小化
MAX 開始時視窗最大化
SEPARATE 在分開的空間內開始 16 位 Windows 程式
SHARED 在分共用的空間內開始 16 位 Windows 程式
LOW 在 IDLE 優先順序類別開始應用程式
NORMAL 在 NORMAL 優先順序類別開始應用程式
HIGH 在 HIGH 優先順序類別開始應用程式
REALTIME 在 REALTIME 優先順序類別開始應用程式
ABOVENORMAL 在 ABOVENORMAL 優先順序類別開始應用程式
BELOWNORMAL 在 BELOWNORMAL 優先順序類別開始應用程式
WAIT 啟動應用程式並等候它結束
command/program
如果是內部 cmd 命令或批檔案,那麼該命令處理器是
用 /K 命令列開關運行 cmd.exe 的。這表示該視窗在命
後仍然存在。
如果不是內部 cmd 命令或批檔案,則是一個程式,並
作為視窗應用程式或控制台應用程式運行。
parameters 這些為傳送到命令/程式的參數
如果命令副檔名被啟用,通過命令列或 START 命令的外部命令
調用會如下改變:
將檔案名稱作為命令鍵入,非可執行檔 可以通過檔案關聯調用。
(例如, WORD.DOC 會調用跟 .DOC 副檔名相關 App程式)。
關於如何從命令指令碼內部建立這些關聯,請參閱 ASSOC 和
FTYPE 命令。
執行的應用程式是 32-位 GUI 應用程式時,CMD.EXE 不等應用
程式終止就返回命令提示。如果在命令指令碼內執行,該新行為
則不會發生。
如果執行的命令列的第一個符號是不帶副檔名或路徑修飾符的
字串 "CMD","CMD" 會被COMSPEC 變數的數值所替換。這
防止從目前的目錄抓出 CMD.EXE。
如果執行的命令列的第一個符號沒有副檔名,CMD.EXE 會使用
PATHEXT 環境變數的數值來決定要以什麼順序尋找哪些擴充
名。PATHEXT 變數的預設值是:
.COM;.EXE;.BAT;.CMD
請注意,該文法跟 PATH 變數的一樣,分號隔開不同的元素。
尋找可執行檔時,如果沒有相配的副檔名,看一看該名稱是否
與目錄名相配。如果確實如此,START 會在那個路徑上調用
Explorer。如果從命令列執行,則等同於對那個路徑作 CD /D。