# Add/Remove Leading Zeroes

There are several techniques to add or remove leading zeroes.
I will list some of these here, all of them intended for unsigned decimal numbers.

Remove Leading Zeroes
# Command Pros and Cons
1 `SET /A Var = 100%Var% %% 100`
• Fail-safe for numbers up to and including 99, with or without leading zero
• Can be scaled up easily to more digits
• Since math is used (`SET /A`), this technique can only be used for numbers of up to 5 digits (3)
2 ```SET Var=10%Var% IF %Var% GTR 1000 SET /A Var=%Var%-1000 IF %Var% GTR  100 SET /A Var=%Var%-100```
• Fail-safe for numbers up to and including 99, with or without leading zero
• Can be scaled up easily to more digits
• Way too much code for just 2 digits
• Since math is used (`IF ... GTR ...` and `SET /A`), this technique can only be used for numbers of up to 5 digits (3)
3 `IF "%Var:~0,1%"=="0" SET Var=%Var:~1%`
• Fail-safe for numbers up to and including 99, with or without leading zero
• Can be scaled up easily: just repeat the command once for every added digit
• Can only be used for fixed number of digits
• Returns an empty string for 0 or a string of zeroes (00, 000, 0000...)
4 ```:Loop IF "%Var:~0,1%"=="0" (   SET Var=%Var:~1%   GOTO Loop )```
• Fail-safe for any number, with or without leading zero
• A lot of code; use only for larger numbers or in case the number of digits is unpredictable
• Returns an empty string for a string of zeroes
5 `FOR /F "tokens=* delims=0" %%A IN ("%Var%") DO SET Var=%%A`
• Fail-safe for any number, with or without leading zero
• Returns an empty string for a string of zeroes
6 `FOR /F "tokens=* delims=0" %%A IN ("%Var%") DO SET /A Var=%%A+0`
• Fail-safe for any number up to 9 digits (2), with or without leading zero
• Returns a single zero for a string of zeroes
• Since math is used (`SET /A`), this technique can only be used for numbers of up to 9 digits (2)
7 ```FOR /F "tokens=* delims=0" %%A IN ("%Var%") DO SET Var=%%A SET /A Var += 0 2>NUL```
• Fail-safe for any number, with or without leading zero
• Returns a single zero for a string of zeroes
• Though math is used in the second line, it is only required for 0, so if it fails on 10-digit numbers that won't affect the resulting value
• Though a math failure on 10-digit numbers may not affect the resulting value, it does raise an error, which could affect the batch code's ErrorLevel
8 ```FOR /F "tokens=* delims=0" %%A IN ("%Var%") DO SET Var=%%A IF "%Var%"=="" SET Var=0```
• Fail-safe for any number, with or without leading zero
• Returns a single zero for a string of zeroes
• Preferred!

Of all techniques to remove leading zeroes presented here, #8 is the preferred one, as it will work for any number, without any restriction.

Add Leading Zeroes
# Command Pros and Cons
1 `IF %Var% LSS 10 SET Var=0%Var%`
• Works only for numbers 0..9 (without leading zero), 00..07 (with leading zero), and 10..99
• Fails on 08 and 09 if %Var% does have a leading zero, because batch file math interprets numbers with leading zeroes as octal
• Since math is used (`IF ... LSS ...`), this technique can only be used for numbers of up to 9 digits (2)
• Not recommended!
2 `IF 1%Var% LSS 100 SET Var=0%Var%`
• Fail-safe for numbers up to and including 99, with or without leading zero
• Since math is used (`IF ... LSS ...`), this technique can only be used for numbers of up to 9 digits (2)
3 ```IF 1%Var% LSS 100 SET Var=0%Var% IF 1%Var% LSS 1000 SET Var=0%Var%```
• Fail-safe for numbers up to and including 999, with or without leading zero
• Can be scaled up easily to up to 9 digits (2)
• Since math is used (`IF ... LSS ...`), this technique can only be used for numbers of up to 9 digits (2)
4 ```SET Var=00%Var% SET Var=%Var:~-2%```
• Fail-safe for numbers up to and including 99, with or without leading zero, and even for an empty string
• Can be scaled up easily to any number of digits
• Preferred!

Of all techniques to add leading zeroes presented here, #4 is the preferred one, as it will work for any number, without any restriction.

 Notes: (1) Modulo division method (first command in the first table) by Paul Ruggieri. (2) Math based techniques can be used for numbers up to 9 digits for Windows XP and later, or up to 4 digits for Windows 2000. (3) Math based techniques with "prefixes" can be used for numbers up to 5 digits for Windows XP and later, and only 1 or 2 digits for Windows 2000. (4) All of these commands are intended for decimal digits only, no signs allowed.

 page last uploaded: 2017-07-06, 12:36