In my application, I get a number having leading zeros. I am trying to trim the leading zeros and get the actual number. I tried using /a
switch which considers
You can use FOR /F
to remove leading zeros.
C:\>SET n=00030
echo off
for /f "tokens=* delims=0" %a in ("%n%") DO echo %a
30
As you can see, the delims
is set to 0. This will makes 0 as a delimiter. At the same time with tokens
of *
this will ensure that the leading 0's will be removed while the rest of the line will be processed (including trailing 0's).
You may refer to this link for more information about removal of leading 0's.
P.S. Do remember to use %%a
instead of %a
when you are running on batch file in FOR /F
.
The exit command is pretty good at clearing leading zeros:
>set n=0000890
>cmd /c exit /b %n%
>echo %errorlevel%
890
With this you can use number up to 32 bit integer limit and the piece of code is really small, despite additional call of cmd.exe could harm the performance.
I found this problem when trying to solve a similar issue myself. I liked your solution until I realized there is a slightly better way:
SET /a N=1%N%+1%N%-2%N%
The method you found is very good. It supports numbers up to 99,999,999 and is very fast.
There is a simpler way to use SET /A that works with numbers up to 9999. It uses the modulus operation. The method cannot be extended to larger numbers.
set n=0027
set /a n=10000%n% %% 10000
The FOR /F method that Dale posted works with "any" size number (up to 8191 digits). However, it needs just a bit more work to handle zero values.
set n=000000000000000000000000000000000000000000000000000027
for /f "tokens=* delims=0" %%N in ("%n%") do set "n=%%N"
if not defined n set "n=0"