在我的应用程序中,我得到一个前导零的数字。我正在尝试修剪前导零并获得实际数字。我尝试使用/a
将赋值右侧视为算术表达式的开关。所以我尝试了:
SET /a N = 00027
上面给了我23的输出,它是八进制数27的十进制等价物。然后我在网上找到了这个解决方案。
SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10
这似乎有效,并给出了输出27。有没有更简单的方法来修剪批处理文件中的前导零?
在我的应用程序中,我得到一个前导零的数字。我正在尝试修剪前导零并获得实际数字。我尝试使用/a
将赋值右侧视为算术表达式的开关。所以我尝试了:
SET /a N = 00027
上面给了我23的输出,它是八进制数27的十进制等价物。然后我在网上找到了这个解决方案。
SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10
这似乎有效,并给出了输出27。有没有更简单的方法来修剪批处理文件中的前导零?
你找到的方法很好。它支持高达 99,999,999 的数字,而且速度非常快。
使用 SET /A 有一种更简单的方法,它适用于最大为 9999 的数字。它使用模数运算。该方法不能扩展到更大的数字。
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 not defined n set "n=0"
exit 命令非常擅长清除前导零:
>set n=0000890
>cmd /c exit /b %n%
>echo %errorlevel%
890
有了这个,您可以使用最多 32 位整数限制的数字,并且这段代码非常小,尽管额外调用 cmd.exe 可能会损害性能。
我在尝试自己解决类似问题时发现了这个问题。我喜欢你的解决方案,直到我意识到有一个更好的方法:
SET /a N=1%N%+1%N%-2%N%
您可以使用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 的更多信息。
PS 请记住使用%%a
,而不是%a
在FOR /F
.