計算(四則演算)

にメンテナンス済み

バッチファイルで、回数をカウントしたり、合計を求めたり、サイコロのような乱数を作ったりしたい場面があります。

コマンドプロンプトで計算を行うには、set コマンドに /a オプションを付けます。この記事では、基本的な書き方から、つまずきやすい注意点までを解説します。

基本的な使い方

構文
set /a 変数名=計算式
set /a RESULT=10 + 5
echo %RESULT%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>set /a RESULT=10 + 5
15
C:\users\user>

計算結果が変数 RESULT に代入されます。コマンドプロンプトに直接入力した場合は、結果がそのまま画面に表示されます。バッチファイル内では表示されないため、必要なら echo で出力します。

計算式の中では % で囲まない

set /a の計算式の中では、変数名をそのまま書けます。set /a TOTAL=PRICE * 3 のように % や ! で囲まなくても、変数の値が使われます。存在しない変数は 0 として扱われます。

使える演算子

演算子意味例結果
+加算set /a X=7 + 310
-減算set /a X=7 - 34
*乗算set /a X=7 * 321
/除算(整数)set /a X=7 / 32
%余りset /a X=7 %% 3(バッチファイル内)1
( )優先順位の指定set /a X=(2 + 3) * 420

乗算・除算・余りは、加算・減算より先に計算されます。

バッチファイルでは余りを %% と書く

余りを求める % は、バッチファイル内では %% と二重に書く必要があります。コマンドプロンプトに直接入力する場合は % を 1 つだけ書きます。

変数を更新する(カウンター・合計)

代入と演算を一度に行う +=、-=、*=、/=、%%= が使えます(%%= はバッチファイル内の書き方で、コマンドプロンプトに直接入力する場合は %= です)。

カウンターを増やす
set COUNT=0
set /a COUNT+=1
set /a COUNT+=1
echo %COUNT%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %COUNT%
2
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

for ループの中で合計を求める例です。set /a はループ内でも変数を直接参照できますが、ループ内で echo により途中経過を表示するには遅延展開(!変数名!)が必要です。

sum.cmd
@echo off
setlocal EnableDelayedExpansion
set SUM=0
for %%N in (10 20 30) do (
    set /a SUM+=%%N
    echo 途中経過: !SUM!
)
echo 合計: !SUM!
endlocal
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>sum.cmd
途中経過: 10
途中経過: 30
途中経過: 60
合計: 60
C:\users\user>

詳しくは遅延展開の記事を参照してください。

小数は扱えない

set /a が扱えるのは整数だけです。割り算の結果は、小数点以下が切り捨てられます。

set /a X=7 / 2
echo %X%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %X%
3
C:\users\user>

小数が必要な場合は、あらかじめ 100 倍などして整数で計算する方法があります。

消費税
set PRICE=1980
set /a TAX=PRICE * 10 / 100
set /a TOTAL=PRICE + TAX
echo 税額: %TAX% 円 / 税込: %TOTAL% 円
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>税額と税込を表示
税額: 198 円 / 税込: 2178 円
C:\users\user>

厳密な小数計算が必要な場合は、PowerShell を呼び出す方法もあります。

powershell -NoProfile -Command "[math]::Round(1980 * 1.1)"

乱数を作る

%RANDOM% は 0 から 32767 の乱数を返します。余りを使うと、範囲を絞れます。

1〜6
set /a DICE=%RANDOM% %% 6 + 1
echo %DICE%

%RANDOM% %% 6 で 0〜5 になるため、+ 1 で 1〜6 にしています。

16 進数・ビット演算

0x を付けると 16 進数を指定できます。

set /a X=0xFF
echo %X%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %X%
255
C:\users\user>

ビット演算には &(AND)、|(OR)、^(XOR)、<<、>> などがあります。これらはコマンドプロンプトの特殊文字でもあるため、計算式全体を二重引用符で囲む必要があります。

set /a "X=6 & 3"
set /a "Y=1 << 4"
echo %X% %Y%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %X% %Y%
2 16
C:\users\user>

引用符で囲まずに set /a X=6 & 3 と書くと、& がコマンドの区切りとして解釈され、意図しない動作になります。

注意点

扱える範囲は 32 ビット整数

扱える数値は -2147483648 から 2147483647 までです。計算結果が範囲を超えてもエラーにはならず、桁あふれして誤った値になります。ただし、2147483648 のような範囲外の数値を直接書くと「無効な数字です」というエラーになります。

set /a X=2147483647 + 1
echo %X%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %X%
-2147483648
C:\users\user>

ファイルサイズの計算など、大きな数を扱う場合は注意してください。

0 で始まる数値は 8 進数として扱われる

08 や 09 のように 0 で始まる数値は 8 進数として解釈されます。8 進数には 8 や 9 が存在しないため、エラーになります。

set /a X=08 + 1
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>set /a X=08 + 1
無効な数字です。数字定数は、10 進数 (17)、16 進数 (0x11)、8 進数 (021) のいずれかです。
C:\users\user>

%TIME% から取り出した分や秒の「08」「09」などをそのまま計算に使うと、この問題が起きます。先頭に 1 を付けて 100 を引くと、10 進数として扱えます。

先頭の
set MIN=%TIME:~3,2%
set /a MIN=1%MIN% - 100
echo %MIN%

MIN が 08 の場合、108 - 100 で 8 になります。

0 で割るとエラーになる

set /a X=10 / 0
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>set /a X=10 / 0
0 による除算エラーです。
C:\users\user>

除数が変数の場合は、if で 0 でないことを確認してから計算してください。

計算結果をゼロ埋めして表示する

連番のファイル名(001、002)には、1000 を足してから右側の桁を取り出す方法が便利です。

3
set /a NUM=1000 + 7
echo %NUM:~1%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %NUM:~1%
007
C:\users\user>
チェック

文字列の切り出し方は、文字列操作の記事で詳しく解説しています。

まとめ

やりたいこと書き方
計算結果を変数に入れるset /a X=1 + 2
カウントアップset /a COUNT+=1
余りを求める(バッチ内)set /a X=10 %% 3
1〜N の乱数set /a X=%RANDOM% %% N + 1
ビット演算set /a "X=6 & 3"(引用符で囲む)
小数の計算100 倍して整数で計算、または PowerShell

関連記事

練習問題

練習問題

バッチファイル内で、10 を 3 で割った余りを変数 R に代入する正しい書き方はどれですか?

正しいものを 1 つ選んでください。

  1. set /a R=10 %% 3
  2. set R=10 % 3
  3. set /a R=10 mod 3

練習問題

set /a X=7 / 2 を実行したとき、X の値はどうなりますか?

正しいものを 1 つ選んでください。

  1. 3(小数点以下は切り捨てられる)
  2. 3.5
  3. 4(四捨五入される)
#コマンドプロンプト #バッチファイル #計算 #set #変数