删除批处理文件中的前导零

时间:2013-02-07 23:06:56

标签: batch-file zero trim

在我的应用程序中,我得到一个前导零的数字。我试图修剪前导零并得到实际数字。我尝试使用/a开关,它将赋值的右侧视为算术表达式。所以我试过了:

SET /a N = 00027

上面给出了 23 的输出,它是八进制数 27 的十进制等值。然后我在网上找到this solution

SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10

这似乎有效,并且输出 27 。是否有更简单的方法来修剪批处理文件中的前导零?

5 个答案:

答案 0 :(得分:16)

你找到的方法非常好。它支持最高99,999,999的数字并且非常快。

有一种更简单的方法可以使用最多9999的数字的SET / A.它使用模数运算。该方法不能扩展到更大的数字。

 set n=0027
 set /a n=10000%n% %% 10000

Dale发布的FOR / F方法使用“任意”大小编号(最多8191位)。但是,它需要更多的工作来处理零值。

set n=000000000000000000000000000000000000000000000000000027
for /f "tokens=* delims=0" %%N in ("%n%") do set "n=%%N"
if "%n:~0,2%"=="00" set "n=0"

可以用一行做同样的事情,用||代替IF语句。如果没有迭代,FOR / F语句会引发无声错误。

set n=000000000000000000000000000000000000000000000000000027
(for /f "tokens=* delims=0" %%N in ("%n%") do set "n=%%N")||set "n=0"

答案 1 :(得分:4)

您可以使用FOR /F删除前导零。

C:\>SET n=00030
echo off
for /f "tokens=* delims=0" %a in ("%n%") DO echo %a
30

如您所见,delims设置为0.这将使0成为分隔符。同时使用tokens *这将确保删除前导0,同时处理其余行(包括尾随0)。

有关删除前导0的详细信息,请参阅this link

P.S。在%%a中运行批处理文件时,请务必使用%a而不是FOR /F

答案 2 :(得分:4)

exit命令非常适合清除前导零:

>set n=0000890

>cmd /c exit /b %n%

>echo %errorlevel%
890

有了这个,您可以使用最多32位整数限制的数字,并且这段代码非常小,尽管额外调用cmd.exe可能会损害性能。

答案 3 :(得分:3)

我自己尝试解决类似问题时发现了这个问题。在您意识到有更好的方法之前,我喜欢您的解决方案:

SET /a N=1%N%+1%N%-2%N%

答案 4 :(得分:-1)

如果只是删除所有零的问题,你可以这样做:

> SET n=00000002304650620000.23094400
> SET n=%n:0=%
2346562.23944