bat指令碼 常見命令

2022-06-12 04:54:07 字數 4805 閱讀 1091

如有錯誤,歡迎指出

學習站點:

批指令碼中只支援行注釋。

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 ...