如有錯誤,歡迎指出
學習站點:批指令碼中只支援行注釋。
rem
用於在批處理檔案中新增註解或說明,且該命令會輸出乙個換行;
:
後緊跟乙個:
或空格、製表符也可起到注釋的作用。
echo
用以顯示訊息和啟用或關閉命令回顯。
使用不帶引數的echo
將顯示當前回顯設定,使用echo [on | off]
開啟或關閉回顯功能。
顯示訊息時,該命令將在訊息後輸出兩個換行。
若將echo
緊跟乙個.
,那個將輸出空的訊息,如果其後又緊跟文字,那麼.
將被視為,即
echo.hi
等同於echo hi
。
@
置於命令前,將關閉該命令本身的回顯。
清除螢幕。
暫停批處理程式,並顯示以下訊息:
請按任意鍵繼續. . .
若要顯示其它提示語,可以使用echo [other prompt] & pause > nul
。
設定命令提示視窗的視窗標題。
將 cmd.exe 定向到批處理程式中帶標籤的行。
goto label
label
指定批處理程式中用作標籤的文字字串。
標籤必須單獨一行,並且以冒號打頭。使用特殊標籤``goto :eof
將控制轉移到當前批指令碼檔案的結尾,注意
eof前有
:。經過試驗,一般的標籤前加上
:`後仍可有效跳轉。
在檔案中搜尋字串。
find [/v] [/c] [/n] [/i] "string" [[drive:][path]filename[ ...]]
param
meaning
/v顯示所有未包含指定字串的行
/c僅顯示包含字串的行數
/n顯示行號
/i搜尋字串時忽略大小寫
"string"
指定要搜尋的文字字串
[drive:][path]filename
指定要搜尋的檔案
如果沒有指定路徑,find 將搜尋在提示符處鍵入的文字或者由另一命令產生的文字。
啟動 windows 命令直譯器的乙個新例項。
/c 執行字串指定的命令然後終止
/k 執行字串指定的命令但保留
如果指定了 /c 或 /k,則會將該開關之後的剩餘部分作為乙個命令列處理。
啟動乙個單獨的視窗以執行指定的程式或命令。
start ["title"] [/d path] [/min] [/max] [command/program] [parameters]
parameters 這些是傳遞給 command/program 的引數。
popd
更改批處理檔案中可替換引數的位置。
shift [/n]
如果命令擴充套件被啟用,shift 命令支援/n
命令列開關;該命令列開關告訴命令從第 n 個引數開始移位;n 介於零和八之間。
例如:shift /2
會將 %3 移位到 %2,將 %4 移位到 %3,等等;並且不影響 %0 和 %1。
條件判斷執行批處理程式中的條件處理。
if [not] errorlevel number command
如果最後執行的程式返回乙個等於或大於指定數字的退出**,指定條件為 true。
if [not] string1==string2 command
if [not] exist filename command
else 子句
必須出現在同一行的 if 之後,如:(由括號包圍的語句將被視為乙個整體,且在語法上被視為一行)
@echo off
echo hello
fakecommand
if not errorlevel 1 (
echo world
) else (
echo "that's impossible."
)exit
退出 cmd.exe 程式(命令直譯器)或當前批處理指令碼。
exit [/b] [exitcode]
/b
僅退出當前批指令碼而不關閉 cmd.exe。如果在批指令碼外執行,則仍會關閉 cmd.exe。
exitcode
指定乙個數字。如果指定了 /b,將errorlevel
設成該數字;否則退出 cmd.exe,並用該數字設定過程退出**。
在乙個批指令碼檔案中呼叫另乙個批指令碼檔案,並傳遞引數。
call [drive:][path]filename [batch-parameters]
該命令亦有如下形式:
call :label arguments
這將建立乙個新的批指令碼檔案上下文,並傳遞引數。那麼如何從這種呼叫中退出呢?因為上下文被視為乙個批指令碼檔案,所以當控制流到達檔案結尾時,該上下文便會結束,即使用goto :eof
。
示例
@echo off
call :func1 pass arguments as parameters
call :func2
exit /b
:func1
echo %*
echo hello
goto :eof
:func2
echo world
goto :eof
注意:這裡的引數指的是parameter
批指令碼裡的%*
指出所有的引數(如 %1 %2 %3 %4 %5 ...)
可使用以下語法對批引數(%n
)進行替換:
%~1 - 刪除引號("),擴充套件 %1
%~f1 - 將 %1 擴充套件到乙個完全合格的路徑名
%~d1 - 僅將 %1 擴充套件到乙個驅動器號
%~p1 - 僅將 %1 擴充套件到乙個路徑
%~n1 - 僅將 %1 擴充套件到乙個檔名
%~x1 - 僅將 %1 擴充套件到乙個副檔名
%~s1 - 擴充套件的路徑只含有短名
%~a1 - 將 %1 擴充套件到檔案屬性
%~t1 - 將 %1 擴充套件到檔案的日期/時間
%~z1 - 將 %1 擴充套件到檔案的大小
%~$path:1 - 查詢列在 path 環境變數的目錄,並將 %1 擴充套件到找到的第乙個完全合格的名稱。如果環境變數名未被定義,或者沒有找到檔案,此修改符會擴充套件到空字串。
可以組合修改符來取得多重結果:
%~dp1 - 只將 %1 擴充套件到驅動器號和路徑
%~nx1 - 只將 %1 擴充套件到檔名和副檔名
%~dp$path:1 - 在列在 path 環境變數中的目錄裡查詢 %1,並擴充套件到找到的第乙個檔案的驅動器號和路徑。
%~ftza1 - 將 %1 擴充套件到類似 dir 的輸出行。
在上面的例子中,%1 和 path 可以被其他有效數值替換。%~
語法終止於第乙個有效引數號碼。
類似於bash
中的?
變數,使用echo %errorlevel%
檢視。一般當命令成功執行時,其值為0
。
c:\users\never>echo %cd%
c:\users\never
c:\users\never>echo %__cd__%
c:\users\never\
語法for %%var_name in (list) do command
list 中的元素由標準界定符分隔
事實上,list被認為是檔案列表,所以也可以在其中使用萬用字元,這會自動展開成列表示例
for %%x in (1 2 3 d:\msys64\*) do @echo %%x
recurse loop
for /r [path] %%variable in ( set_of_file_filters ) do command
for /l %variable in (start,step,end) do command
/d
只遍歷目錄,如果未指定,則只遍歷檔案。
for /d %x in (*) do @echo %x
bat指令碼獲取時間命令
比如在windowscmd命令列視窗執行date命令後這個環境變數的值為 那麼如下的各個操作的意義如下 date 0,4 表示從左向右指標向右偏0位,然後從指標偏移到的位置開始提取4位字元,結果是2014 年的值 date 5,2 表示指標從左向右偏移5位,然後從偏移處開始提取2位字元,結果是03 ...
Bat指令碼 (二) for命令的使用
for 命令是乙個比較複雜的命令,主要用於引數在指定的範圍內迴圈執行命令。1 for in set do command command parameters variable 指定乙個單一字母可替換的引數。變數名稱是區分大小寫的,所以 i 不同於 i 在批處理檔案中使用 for 命令時,指定變數建...
BAT指令碼編寫
批處理檔案最常用的幾個命令 echo表示顯示此命令後的字元 echo on 表示在此語句後所有執行的命令都顯示命令列本身 echo off 表示在此語句後所有執行的命令都不顯示命令列本身 與echo off相像,但它是加在每個命令列的最前面,表示執行時不顯示這一行的命令列 只能影響當前行 call ...