幾個高級一點的bat命令


最近在做性能測試,有大量的重復的操作,所以打算用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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM