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

Mah*_*esh 19 trim batch-file zero

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

SET /a N = 00027
Run Code Online (Sandbox Code Playgroud)

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

SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10
Run Code Online (Sandbox Code Playgroud)

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

dbe*_*ham 18

你发现的方法非常好.它支持高达99,999,999的数字,速度非常快.

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

 set n=0027
 set /a n=10000%n% %% 10000
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

替换__CODE__IF语句可以用一行做同样的事情.如果没有迭代,FOR/F语句会引发无提示错误.

 set n=0027
 set /a n=10000%n% %% 10000
Run Code Online (Sandbox Code Playgroud)


小智 8

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

SET /a N=1%N%+1%N%-2%N%
Run Code Online (Sandbox Code Playgroud)


npo*_*aka 6

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

>set n=0000890

>cmd /c exit /b %n%

>echo %errorlevel%
890
Run Code Online (Sandbox Code Playgroud)

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

  • +1,好方法,但您需要注意局限性。ERRORLEVEL 是一个有符号的 32 位整数,其值介于 -2147483648 和 2147483647 之间。超出这些限制的 EXIT 值将被转换为限制范围内的 1。例如,EXIT 4000000000 报告为 ERRORLEVEL -294967296。 (2认同)

Dal*_*ale 5

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

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

正如您所看到的,delims被设置为 0。这将使 0 作为分隔符。同时,tokens*将确保删除前导 0,同时处理该行的其余部分(包括尾随 0)。

您可以参考此链接以获取有关删除前导 0 的更多信息。

PS 请记住在运行批处理文件%%a时使用.%aFOR /F