最近在做性能測試,有大量的重復的操作,所以打算用bat文件做腳本。之前也用過bat文件,但是都只是應用到一些簡單的功能。比如用%var%來指定環境變量,%0,%1來指代傳入的參數,用if來進行字符串比較等等。今天通過網上搜索,學會了三個新的功能。
1. 用set /a 來進行數學計算,具體的語法如下:
Add: SET /A Result = 12 + 4
Subtract: SET /A Result = 23 - 7
Multiply: SET /A Result = 8 * 2
Integer divide: SET /A Result = 33 / 2
Modulo divide: (1, 2) SET /A "Result = 66 %% 25"
Shift right: (2) SET /A "Result = 128 >> 3"
Shift left: SET /A "Result = 1 << 4"
Bitwise AND: SET /A "Result = 48 & 23"
Bitwise OR: SET /A "Result = 16 | 16"
Bitwise XOR: SET /A "Result = 31 ^ 15"
然后就可以使用%Result%來引用計算出來的結果。
2. 用()來在if中使用多條命令。
如:
if %1==xp (
echo xp
copy data data.xp
)
這里語法上有一點要求是if語句和后面的“(”之間必須有一個空格,否則會認為語法錯誤。
if后面還可以接esle,這個else必須和if的“)”在同一行(中間有沒有空格都可以),並且和后面的“(”有一個空格
if %1==xp (
echo xp
copy data data.xp
)else (
echo non-xp
copy data data.non-xp
)
3. 用for /L進行循環
語法為:
FOR /L %variable IN (start,step,end) DO command [command-parameters]
一個例子:
FOR /L %%i in (1,1,20) DO echo %%i
這個例子的意思是從1開始,依次執行DO后面的語句,然后每次加1,一直到20。
4. 用ENABLEDELAYEDEXPANSION來在循環中使用復雜的多條指令。
For循環也可以使用()來執行多條指令,比如
FOR /L %%i in (1,1,20) DO (
echo %%i
echo %%i
)
但是這條指令是有問題的:
FOR /L %%i In (1,1,20) DO (
echo %%i
set /A Modular = %%i %% 2
if %Modular% == 0 set InstallPath=C:\Program Files\AliBrowser
if %Modular% == 1 set InstallPath=C:\Program Files\AliBrowser.new
)
因為bat在處理環境變量時是一開始就完全替換,所以在這個for語句中不能用set命令。
要在for語句中使用set命令,就必須先執行下面的命令,來啟動環境變量的延時擴展:
setlocal ENABLEDELAYEDEXPANSION。
啟動完成了之后在引用環境變量時不應該用%%,而應該改成!!,如下所示:
FOR /L %%i In (1,1,20) DO (
echo %%i
set /A Modular = %%i %% 2
if !Modular! == 0 set InstallPath=C:\Program Files\AliBrowser
if !Modular! == 1 set InstallPath=C:\Program Files\AliBrowser.new
)
具體什么是延時擴展請google。