變數操作

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 代替。