Skip to content

How to Convert Between Octal and Decimal in Batch Script

Learn how to convert octal (base-8) numbers to decimal and vice versa in Windows Batch scripts using iterative logic, with practical examples and common pitfalls like the '010' octal trap.

Octal (Base-8) is a numbering system that uses only eight digits (0 through 7). While less common than Binary or Hexadecimal today, it is still frequently used in file permissions (especially in cross-platform environments) and some legacy computing systems. In Batch, converting between Octal and Decimal involves repeated division or multiplication by the number 8.

In this guide, we will demonstrate how to perform these conversions using iterative logic.

Method 1: Octal to Decimal

Each digit in an octal number represents a power of 8 based on its position. For example, $127$ (Octal) $= (1 \times 8^2) + (2 \times 8^1) + (7 \times 8^0) = 87$ (Decimal).

Implementation Script

@echo off
setlocal enabledelayedexpansion

set "octal=127"
set "decimal=0"
set "powerOf8=1"

:: Get the length of the octal string
set "temp=!octal!"
set "len=0"
:len_loop
if defined temp (
    set "temp=!temp:~1!"
    set /a "len+=1"
    goto :len_loop
)

:: Process digits from right to left
:calc_loop
if !len! LEQ 0 goto :done_oct
set /a "len-=1"
set "digit=!octal:~%len%,1!"

set /a "val=digit * powerOf8"
set /a "decimal+=val"
set /a "powerOf8*=8"
goto :calc_loop

:done_oct
echo Octal:   %octal%
echo Decimal: %decimal%
pause

Method 2: Decimal to Octal

To convert decimal to octal, repeatedly divide the number by 8 and record the remainders.

Implementation Script

@echo off
setlocal enabledelayedexpansion

set "dec=87"
set "oct="
set "original=%dec%"

echo Converting %dec% to Octal...

if !dec! EQU 0 (
    set "oct=0"
    goto :done_dec
)

:dec_loop
set /a "r=dec %% 8"
set "oct=!r!!oct!"
set /a "dec/=8"
if !dec! GTR 0 goto :dec_loop

:done_dec
echo Decimal: %original%
echo Octal:   !oct!
pause

Why Convert to Octal in Batch?

  1. File Permissions: Certain cross-platform tools and legacy Windows utilities store file security descriptors using octal flags.
  2. Network Configuration: Some older network protocols and hardware reporting systems use octal for port mapping or device IDs.
  3. Legacy System Audits: If your script reads logs from old mainframe or Unix-linked systems, the data may be presented in octal format.

⚠️ The Batch "Octal Trap"

In Batch arithmetic (set /a), numbers that start with a zero are automatically treated as Octal.

  • set /a x=010 results in 8, not 10.
  • set /a x=019 results in an Error (because 9 is not a valid octal digit).

Conclusion

Converting between Octal and Decimal adds a specialized layer of numeric handling to your scripts. By mastering the "Base-8" logic, you ensure your automation can interact with legacy data formats and security descriptors with absolute accuracy. This capability is essential for system administrators maintaining diverse, multi-platform environments and auditing aged system logs.

Navigation