字符串操作
獲取子字符串
通過指定子字符串的起始索引以及長度來獲取子字符串:
@echo off
set str=Helloworld
echo %str%
set str=%str:~5,3%
echo %str%
上面的代碼運行結果爲:
Helloworld
wor
第一個參數str表示母字符串,即Helloworld
第二個參數~5表示子字符串從索引5開始,即w
第三個參數3表示子字符串的長度
替換子字符串
批處理中替換子字符串的模式爲“A:B=C”,示例代碼:
@echo off
set str=This message needs changed.
echo %str%
set str=%str:needs=has%
echo %str%
上面的代碼運行結果爲:
This message needs changed.
This message has changed.
第一個參數str表示母字符串,即This message needs changed.
第二個參數needs表示待替換的子字符串
第三個參數has表示替換後的子字符串
for循環
語法
FOR %variable IN (set) DO command [command-parameters]
其中,
%variable:指定一個單一字母可替換的參數。(區分大小寫)
(set):指定一個或一組文件。可以使用通配符。
command:指定對每個文件執行的命令。
command-parameters:爲特定命令指定參數或命令行開關。
.bat文件與命令行窗口的一個小差異
在.bat文件中會將%%視爲命令行窗口中的%,因此,for循環的參數例如%i,在.bat文件中應寫成%%i
命令擴展
/D
FOR /D %variable IN (set) DO command [command-parameters]
與目錄名匹配,不與文件名匹配
/R
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
遍歷[drive:]path,並指向每個子目錄中的FOR語句。
若/R後沒有指定目錄,則使用當前目錄
/L
FOR /L %variable IN (start,step,end) DO command [command-parameters]
以增量形式從start到end的一個數字序列,例如:(1,1,5)將產生序列1 2 3 4 5,(5,-1,1)將產生序列(5 4 3 2 1)。
/F
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
用來處理文件、字符串和命令的輸出結果:
fileset 爲一個或多個文件名。繼續到 fileset 中的下一個文件之前,
每份文件都被打開、讀取並經過處理。處理包括讀取文件,將其分成一行行的文字,
然後將每行解析成零或更多的符號。然後用已找到的符號字符串變量值調用 For 循環。
以默認方式,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白行。
您可通過指定可選 “options” 參數替代默認解析操作。這個帶引號的字符串包括一個
或多個指定不同解析選項的關鍵字。這些關鍵字爲:
eol=c:指一個行註釋字符的結尾(就一個)
skip=n:指在文件開始時忽略的行數。
delims=xxx:指分隔符集。這個替換了空格和跳格鍵的默認分隔符集。
tokens=x,y,m-n:指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導致額外變量名稱的分配。m-n格式爲一個範圍。通過 nth 符號指定 mth。如果符號字符串中的最後一個字符星號,那麼額外的變量將在最後一個符號解析之後分配並接受行的保留文本。
usebackq:指定新語法已在下類情況中使用:在作爲命令執行一個後引號的字符串並且一個單引號字符爲文字字符串命令並允許在 file-set中使用雙引號擴起文件名稱。
具體用法可以參考幫助文檔:在命令行中鍵入for /?來查看
變量延遲
在沒有開啓變量延遲的情況下,某條命令行中的變量改變,必須到下一條命令才能體現。因此,對於for循環中的set語句,從第二條命令開始就不會有效果。要解決這個問題就需要手動開啓變量延遲:
setlocal enabledelayedexpansion
在開啓變量延遲之後,對於要延遲的變量不能再用%括起來了,而應用!括起來,例如:
@echo off & setlocal EnableDelayedExpansion
set a=2
echo a=%a%
echo 開始進入for循環
for /L %%i in (4,1,10) do (
set a=%%i
echo a=!a!
)
上面的代碼運行結果爲:
a=2
開始進入for循環
a=4
a=5
a=6
a=7
a=8
a=9
a=10