几个高级一点的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。