Skip to main content

How to Check if a Number is Odd or Even in Batch Script

Determining if a number is odd or even is a classic programming problem, often used in scripts to perform alternating actions, validate input, or for mathematical checks. The core of this task lies in checking a number's divisibility by two. While Windows Batch has no native IsEven() function, it provides a powerful arithmetic engine in the SET /A command that can solve this problem in a surprisingly elegant and efficient way.

This guide will teach you the clever "pure-batch" method using a bitwise operation, which is the fastest native approach. We will also cover the more traditional modulo method and the modern PowerShell alternative for comparison

The Mathematical Logic: Modulo and Bitwise Operations

There are two primary ways to determine if an integer is even or odd:

  1. Modulo: An integer is even if the remainder after dividing it by 2 is 0. It is odd if the remainder is 1. This is known as the modulo operation.
  2. Bitwise: In binary representation, an integer is even if its last (least significant) bit is 0. It is odd if its last bit is 1.

Batch script's SET /A command can perform both of these operations.

The Core Method (Pure Batch): The Bitwise AND Trick

This is arguably the most efficient and clever "pure-batch" method. It uses a bitwise AND operation to check the last bit of the number.

The Syntax: SET /A "result = %MyNumber% & 1"

  • SET /A: The command for arithmetic operations.
  • &: The bitwise AND operator.
  • If the result is 0, the number is even.
  • If the result is 1, the number is odd.

The Alternative Batch Method: The Modulo Operator

This method is more intuitive for those familiar with standard math. It uses the modulo operator (%) to find the remainder.

Syntax: SET /A "result = %MyNumber% %% 2"

  • %%: In a batch script, you must use a double percent %% to represent the modulo operator, as a single % is used for variable expansion.
  • If the result is 0, the number is even.
  • If the result is 1, the number is odd.

For readability and simplicity, a PowerShell one-liner is an excellent choice. It uses a standard modulo operator.

Syntax: powershell -Command "if (%MyNumber% %% 2 -eq 0) { exit 0 } else { exit 1 }"

  • If the command's %ERRORLEVEL% is 0, the number is even.
  • If the %ERRORLEVEL% is 1, the number is odd.

Basic Example: Testing a Number

Let's test the number 42 to see if it's even or odd using the primary (bitwise) method.

@ECHO OFF
SET "MyNumber=42"
SET /A "result = %MyNumber% & 1"

ECHO Testing the number: %MyNumber%

IF %result% EQU 0 (
ECHO The number is EVEN.
) ELSE (
ECHO The number is ODD.
)

Output:

Testing the number: 42
The number is EVEN.
note

If you change MyNumber to 77, the output will be The number is ODD.

How the Bitwise Trick Works

The bitwise AND (&) operator compares the binary representations of two numbers. The last bit of any number determines if it's odd or even.

  • The number 6 in binary is ...00000110.
  • The number 7 in binary is ...00000111.
  • The number 1 in binary is ...00000001.

When we perform a bitwise AND with 1, we are effectively isolating the last bit:

  ...00000110  (6)
& ...00000001 (1)
-------------
...00000000 (Result is 0 -> Even)

...00000111 (7)
& ...00000001 (1)
-------------
...00000001 (Result is 1 -> Odd)

This is a very fast operation at the processor level.

Common Pitfalls and How to Solve Them

  • The Input is Not a Number: Both SET /A methods will fail if the variable contains non-numeric characters. The script will throw an "Invalid number" error. Solution: Before performing the check, you should first validate that the string is a valid number.
  • The Modulo %% Confusion: Forgetting to use a double percent %% for the modulo operator in a script is a very common syntax error. Solution: Remember that %% is required in a .bat file for the modulo operator. This is a key reason the bitwise & operator is often preferred, as its syntax is simpler.
  • Negative Numbers: Both the bitwise and modulo methods in batch script work correctly for negative numbers. -2 & 1 is 0 (even), and -3 & 1 is 1 (odd).

Practical Example: A Loop to Categorize Numbers

This script uses a FOR /L loop to iterate from 1 to 10 and uses the bitwise method to report whether each number is odd or even.

@ECHO OFF
SETLOCAL
ECHO --- Categorizing Numbers from 1 to 10 ---

FOR /L %%N IN (1,1,10) DO (
SET "CurrentNumber=%%N"

REM --- Use the bitwise check ---
SET /A "result = !CurrentNumber! & 1"

IF !result! EQU 0 (
ECHO Number %%N is EVEN.
) ELSE (
ECHO Number %%N is ODD.
)
)

ENDLOCAL
note

!CurrentNumber! with delayed expansion would be required if we were modifying the variable inside the loop, but here it's just good practice.

Conclusion

Checking if a number is odd or even is a simple task in batch script thanks to the power of the SET /A command.

  • The bitwise AND method (SET /A result = number & 1) is the fastest and most efficient "pure-batch" solution, with a simple syntax.
  • The modulo method (SET /A result = number %% 2) is also perfectly effective but requires the unusual %% syntax.
  • The PowerShell method is a great modern alternative, offering high readability and reliability.

For any script needing to determine if a number is odd or even, the bitwise & 1 trick is a surprisingly elegant and powerful native solution.