Batch脚本中变量的各种表示形式

Batch中涉及到的变量表示和使用方法比较多,这里对目前了解到的各种形式进行区分

%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
发表了43篇文章 · 总计78.96k字
·
Built with Hugo
主题 StackJimmy 设计