%0, %1, %2…, %[num]
使用百分号后面加一个数字(%[num]
)这种形式是批处理脚本中的固定用法,类似于C和C++中的argv[]
数组,它向程序传递执行这个批处理程序时的程序名和参数。
其中%0
表示这个批处理程序的文件名,%1
表示调用这个批处理时传入的第1个参数,%2
表示调用这个批处理时传入的第2个参数,最大可以到%9
例如:
@echo off
echo script_name=%0
echo param1=%1
%i, %j, %n…, %[char]
使用百分号后面加一个字母%[char]
(可以使用任意字母)表示一种特殊变量形式,它只能用在for循环语句中表示循环的变量,并且只能用在命令行中,在批处理脚本中需要使用%%[char]
的形式
例如:
for %i in (1,2,3) do echo %i
%%i, %%j, %%n…, %%[char]
与上面%[char]类似,也是只能用在for循环语句中表示循环的变量,但是它用于批处理脚本文件中
例如:
@echo off
for /l %%i in (1,1,10) do echo %%i
pause
var
通常只有在给变量赋值的时候会直接使用变量名,要得到变量的值则需要下面要讲的%var%
和!var!
例如:
@echo off
set var1=1
set var2=2
echo var1 # 打印var1
echo var2 # 打印var2
echo %var1% # 打印1
echo %var2% # 打印2
pause
%var%
如果想要引用变量的值则需要用两个百分号将变量括起来(%var%
)
例如:
@echo off
set var1=1
set /a var2=%var1%+2
set var3=%var2%
echo var1=%var1%
echo var2=%var2%
echo var3=%var3%
pause
其中set
指令的/a
参数表示右边是一个算术运算,而不是进行字符串替换。也就是说set /a var2=%var1%+2
是将var1
的值和2
相加后得到的结果赋值给var2
,而set var2=%var1%+2
则是将1+2
这个字符串赋值给var2
!var!
在Windows 批处理脚本中,!var!
的语法用于访问在延迟变量扩展模式下的变量值。而延迟变量扩展是一种特殊的处理方式,它允许在一个代码块(如 for
循环或 if
语句块)内部动态地获取和更新变量的值,要想使用延迟变量扩展,则需要在脚本中声明启用延迟变量扩展setlocal enabledelayedexpansion
所谓延迟变量扩展,就是指这个变量的值在使用的时候才被确定。而在Windows的批处理中,默认的变量扩展(也就是%var%
)的值是在一行代码(代码块)被执行之前确定的。这意味着,在一个循环或条件块内部改变一个变量的值,并不能立即反映在同一个块内的后续命令中
例如:
@echo off
set test=123
set test2=234
for /l %%i in (1,1,10) do (
set /a test2=%test%+%%i
echo %test2%
)
pause
这个脚本被执行后,将会打印10次234(test2的初始值),也就是说在循环开始前,使用%var%
表示的变量值就已经被确定并不会被更改,如果想动态更新test2的值则需要像下面一样启用延迟变量扩展,并使用!var!
引用变量值:
@echo off
setlocal enabledelayedexpansion
set test=123
set test2=234
for /l %%i in (1,1,10) do (
set /a test2=!test!+%%i
echo !test2!
)
pause