变量操作

set var=10
set /a var=%var%+10
echo %var%

var 的最终值是 20。

第二行不在用于例如 IF 条件或 FOR 循环的命令块内,因为需要延迟扩展而不是标准环境变量扩展。

这是在命令块中工作的另一种更好的方法:

set var=10
set /A var+=10
echo %var%

命令提示符环境支持带符号的 32 位整数值:

  • 另外++=
  • 减法 --=
  • 乘法**=
  • //=
  • 模数除法%%=
  • 按位和 &
  • 按位或者|
  • 按位 NOT ~
  • 按位 XOR ^
  • 按位左移 <<
  • 按位右移 >>
  • 合乎逻辑的不是 18
  • 一元减去 -
  • () 分组

Windows 命令解释程序不支持算术表达式中的 64 位整数值或浮点值。

注意: 运算符%必须以批处理文件的形式写入%%才能被解释为运算符。

在执行命令行的命令提示符窗口中,set /A Value=8 % 3 将值 2 分配给环境变量 Value 并另外输出 2

在批处理文件中必须写入 set /A Value=8 %% 3,将值 2 分配给环境变量 Value,并且不分别输出任何内容来处理 STDOUT (标准输出)。批处理文件中的行 set /A Value=8 % 3 将导致执行批处理文件时出现错误消息 Missing operator

环境要求切换/A 仅用于算术运算,而不是普通的字符串变量。

set /A 之后的算术表达式中的每个字符串都是数字和运算符是否被自动解释为环境变量的名称。

因此,当变量名仅由单词字符(0-9A-Za-z_)组成时,不需要使用%variable%!variable! 引用变量的值,第一个字符不是数字,这在命令块中特别有用从 ( 开始,以匹配的 ) 结束。

使用 C / C++函数 strtol 将数字从字符串转换为整数,其中 base 为零,这意味着自动基础确定很容易导致意外结果。

例:

set Divided=11
set Divisor=3

set /A Quotient=Divided / Divisor
set /A Remainder=Divided %% Divisor

echo %Divided% / %Divisor% = %Quotient%
echo %Divided% %% %Divisor% = %Remainder%

set HexValue1=0x14
set HexValue2=0x0A
set /A Result=(HexValue1 + HexValue2) * -3

echo (%HexValue1% + %HexValue2%) * -3 = (20 + 10) * -3 = %Result%

set /A Result%%=7
echo -90 %%= 7 = %Result%

set OctalValue=020
set DecimalValue=12
set /A Result=OctalValue - DecimalValue

echo %OctalValue% - %DecimalValue% = 16 - 12 = %Result%

这个例子的输出是:

11 / 3 = 3
11 % 3 = 2
(0x14 + 0x0A) * -3 = (20 + 10) * -3 = -90
-90 %= 7 = -6
020 - 12 = 16 - 12 = 4

在算术表达式的评估中未定义的变量用值 0 代替。