Mah*_*esh 19 trim batch-file zero
在我的应用程序中,我得到一个前导零的数字.我试图修剪前导零并得到实际数字.我尝试使用/a
switch,它将赋值的右侧视为算术表达式.所以我尝试过:
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)
exit 命令非常擅长清除前导零:
>set n=0000890
>cmd /c exit /b %n%
>echo %errorlevel%
890
Run Code Online (Sandbox Code Playgroud)
有了这个,您可以使用最多 32 位整数限制的数字,并且代码片段非常小,尽管额外调用 cmd.exe 可能会损害性能。
您可以使用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
时使用.%a
FOR /F