批处理变量
批处理文件中有两种类型的变量。 其中一个参数是在调用批处理文件时可以传递的参数,另一个是通过set
命令完成的。
命令行参数
批处理脚本支持命令行参数的概念,其中参数可以在被调用时传递给批处理文件。参数可以通过变量%1
,%2
,%3
等从批处理文件中调用。
以下示例显示了一个批处理文件,它接受3个命令行参数,并将它们回显到命令行屏幕。
@echo off
echo %1
echo %2
echo %3
如果上面的批处理脚本存储在一个名为test.bat
的文件中,我们将运行该批处理 -
Test.bat 1 2 3
以下是批处理文件执行时在命令提示符下的外观截图。
以上命令产生以下输出。
1
2
3
如果要运行批处理 -
Example 1 2 3 4
输出仍然与上面一样。 但是,第四个参数将被忽略。
set命令
变量可以被初始化的另一种方式是通过“set”
命令。 以下是set
命令的语法。
语法
set /A variable-name=value
其中 -
- variable-name - 是想要设置的变量的名称。
- value - 是需要根据变量设置的值。
- /A - 如果该值本质上是数值,则使用此开关。
以下示例显示了可以使用set
命令的简单方法。
示例
@echo off
set message=Hello World
echo %message%
- 在上面的代码片段中,定义了一个名为
“message”
的变量,其值为“Hello World”
。 - 要显示变量的值,请注意变量需要包含在
%
符号中。
以上命令产生以下输出 -
Hello World
使用数字值
在批处理脚本中,也可以定义一个变量来保存一个数值。 这可以通过使用/A
开关完成。
以下代码显示了可以使用/A
开关设置数值的一种简单方法。
@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%
- 首先将
2
个变量a
和b
的值分别设置为5
和10
。 - 相加这些值并存储在变量
c
中。 - 最后,显示变量
c
的值。
上述程序的输出结果为15
。
所有的算术运算符都在批处理文件中工作。 以下示例显示算术运算符可以在批处理文件中使用。
@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%
SET /A c=%a% - %b%
echo %c%
SET /A c=%b% / %a%
echo %c%
SET /A c=%b% * %a%
echo %c%
以上命令产生以下输出。
15
-5
2
50
局部与全局变量
在任何编程语言中,都有一个选项可以将变量标记为具有某种范围,即可以访问它们的代码部分。 通常情况下,具有全局作用域的变量可以从程序中的任何地方访问,而局部作用域变量则有一个可以访问的定义的边界。
DOS脚本还定义了局部和全局范围的变量。 默认情况下,变量是整个命令提示符会话的全局变量。 调用SETLOCAL
命令,使变量局部在脚本的范围内。 在调用SETLOCAL
之后,任何变量赋值在调用ENDLOCAL
,调用EXIT
,或者当执行到达脚本中的文件结尾(EOF)时都会返回。 以下示例显示了在脚本中设置局部和全局变量时的差异。
示例
@echo off
set globalvar=5
SETLOCAL
set var=13145
set /A var=%var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
上述程序几乎没有重要的事情要注意。
'globalvar'
是用全局范围定义的,在整个脚本中都是可用的。var
变量是在局部范围内定义的,因为它被包含在SETLOCAL
和ENDLOCAL
块之间。 因此,这个变量在执行'ENDLOCAL'
语句后就会被销毁。
以上命令产生以下输出。
13150
5
注意:命令echo %var%
不会产生任何东西,因为在ENDLOCAL
语句之后,'var'
变量将不再存在。
使用环境变量
如果有跨批处理文件使用的变量,那么最好使用环境变量。 当定义了环境变量,就可以通过%
符号来访问它。 以下示例显示如何查看系统上定义的JAVA_HOME
。 JAVA_HOME
变量是各种应用程序通常使用的关键组件。
@echo off
echo %JAVA_HOME%
输出将显示从系统到系统的JAVA_HOME
目录。 以下是一个输出的例子。
C:\Users\Administrator>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_65