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

posted @ 2012-03-15 16:30  皮皮鲁.  阅读(3441)  评论(7编辑  收藏  举报