批处理变量

批处理变量

批处理文件中有两种类型的变量。 其中一个参数是在调用批处理文件时可以传递的参数,另一个是通过set命令完成的。

命令行参数

批处理脚本支持命令行参数的概念,其中参数可以在被调用时传递给批处理文件。参数可以通过变量%1%2%3等从批处理文件中调用。

以下示例显示了一个批处理文件,它接受3个命令行参数,并将它们回显到命令行屏幕。

@echo off 
echo %1 
echo %2 
echo %3

如果上面的批处理脚本存储在一个名为test.bat的文件中,我们将运行该批处理 -

Test.bat 1 2 3

以下是批处理文件执行时在命令提示符下的外观截图。

以上命令产生以下输出。

1 


如果要运行批处理 -

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个变量ab的值分别设置为510
  • 相加这些值并存储在变量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 


局部与全局变量

在任何编程语言中,都有一个选项可以将变量标记为具有某种范围,即可以访问它们的代码部分。 通常情况下,具有全局作用域的变量可以从程序中的任何地方访问,而局部作用域变量则有一个可以访问的定义的边界。

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变量是在局部范围内定义的,因为它被包含在SETLOCALENDLOCAL块之间。 因此,这个变量在执行'ENDLOCAL'语句后就会被销毁。

以上命令产生以下输出。

13150

注意:命令echo %var%不会产生任何东西,因为在ENDLOCAL语句之后,'var'变量将不再存在。

使用环境变量

如果有跨批处理文件使用的变量,那么最好使用环境变量。 当定义了环境变量,就可以通过%符号来访问它。 以下示例显示如何查看系统上定义的JAVA_HOMEJAVA_HOME变量是各种应用程序通常使用的关键组件。

@echo off 
echo %JAVA_HOME%

输出将显示从系统到系统的JAVA_HOME目录。 以下是一个输出的例子。

C:\Users\Administrator>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_65