Skip to main content

How to Perform Basic Math (Add, Subtract, Multiply, Divide) in Batch Script

Performing simple mathematical calculations is a fundamental requirement for many scripts. You might need to increment a counter, calculate an offset, or determine a total. The standard way to handle math in a Windows Batch script is with the SET command, used with its special /A (Arithmetic) switch.

This guide will teach you the syntax of SET /A and show you how to perform all the basic arithmetic operations. You will also learn about its integer-only limitation and how to control the order of operations with parentheses.

The Core Command: SET /A​

The SET /A command tells the command processor to treat the string that follows as an Arithmetic expression. It can evaluate the expression and, optionally, assign the result to a variable.

Syntax: SET /A "VariableName = expression"

  • VariableName =: This part is optional. If you include it, the result of the calculation is stored in VariableName. If you omit it, the result is simply printed to the command line.
  • expression: The mathematical formula you want to evaluate (e.g., 5 + 3).

Basic Arithmetic Operators​

The SET /A command supports all the standard operators you would expect:

OperatorDescriptionExample
+Addition5 + 3
-Subtraction10 - 4
*Multiplication6 * 7
/Division20 / 5
%%Modulo (Remainder)13 %% 5

Basic Examples of Math Operations​

For these examples, we will store the result in a variable and then ECHO it.

Addition (+)​

@ECHO OFF
SET "Apples=5"
SET "Oranges=10"

SET /A "TotalFruit = %Apples% + %Oranges%"
ECHO Total fruit: %TotalFruit%

Output:

Total fruit: 15

Subtraction (-)​

@ECHO OFF
SET "TotalItems=100"
SET "ItemsUsed=42"

SET /A "ItemsLeft = %TotalItems% - %ItemsUsed%"
ECHO Items left: %ItemsLeft%

Output:

Items left: 58

Multiplication (*)​

@ECHO OFF
SET "Price=10"
SET "Quantity=7"

SET /A "TotalCost = %Price% * %Quantity%"
ECHO Total cost: $%TotalCost%

Output:

Total cost: $70

Division (/)​

This is where you must be careful. SET /A only performs integer division.

@ECHO OFF
SET /A "Result = 10 / 3"
ECHO 10 divided by 3 is: %Result%

Output:

10 divided by 3 is: 3
note

The 0.333... fractional part is completely discarded.

Combining Operations and Using Parentheses​

The SET /A command understands the standard mathematical order of operations (multiplication and division are performed before addition and subtraction). You can use parentheses () to control the order explicitly.

@ECHO OFF
ECHO --- Calculating with and without parentheses ---

REM This will calculate 5 * 10 first. (2 + 50) = 52
SET /A "Result1 = 2 + 5 * 10"
ECHO 2 + 5 * 10 = %Result1%

REM The parentheses force 2 + 5 to be calculated first. (7 * 10) = 70
SET /A "Result2 = (2 + 5) * 10"
ECHO (2 + 5) * 10 = %Result2%

Common Pitfalls and How to Solve Them​

The Integer-Only Limitation​

This is the single biggest limitation of SET /A. It cannot handle decimals or floating-point numbers.

  • 10 / 4 will result in 2, not 2.5.
  • SET /A "Value = 99.5" will cause an error.

Solution: For any math that requires decimal precision, you must delegate the calculation to a more powerful tool like PowerShell.

FOR /F %%N IN ('powershell -Command "10 / 4"') DO SET "Result=%%N"
ECHO The precise result is: %Result%

This PowerShell one-liner correctly returns 2.5.

Division by Zero​

If your script attempts to divide by a variable that contains 0, it will crash with a "Divide by zero error."

Solution: Always check if your denominator is zero before performing a division.

IF %TotalItems% EQU 0 (
ECHO Cannot divide by zero.
) ELSE (
SET /A "Average = %TotalCost% / %TotalItems%"
ECHO The average cost is: %Average%
)

Practical Example: A Simple File Counter​

This script uses SET /A to increment a counter inside a FOR loop to count the number of text files in a directory.

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET "count=0"

ECHO --- Counting .txt files ---
FOR %%F IN (*.txt) DO (
REM Increment the counter by 1 for each file found.
SET /A "count+=1"
)

ECHO Found !count! text files in this directory.

ENDLOCAL
note

DelayedExpansion (!count!) is required here to correctly read the changing value of the count variable inside the loop.

Conclusion​

The SET /A command is the simple and effective built-in tool for performing integer arithmetic in a batch script.

Key takeaways:

  • The core syntax is SET /A "Var = expression".
  • It supports all basic operators: +, -, *, /, and %% (modulo).
  • It is strictly for integers and will truncate any decimal results from division.
  • For floating-point math, you must use a more powerful tool like PowerShell.
  • Always check for a division by zero to prevent your script from crashing.