24

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

SET /a N = 00027

上面给了我23的输出,它是八进制数27的十进制等价物。然后我在网上找到了这个解决方案。

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

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

4

4 回答 4

21

你找到的方法很好。它支持高达 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"
于 2013-02-08T12:00:13.893 回答
6

exit 命令非常擅长清除前导零:

>set n=0000890

>cmd /c exit /b %n%

>echo %errorlevel%
890

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

于 2014-09-22T15:17:01.827 回答
5

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

SET /a N=1%N%+1%N%-2%N%
于 2020-02-22T08:09:22.047 回答
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 的更多信息。

PS 请记住使用%%a,而不是%aFOR /F.

于 2013-02-08T08:57:52.750 回答