在我的应用程序中,我得到一个具有前导零的数字。我正在修剪前导零并获取实际的数字。我尝试使用/a
开关,它将分配的右侧视为算术表达式。所以,我想:删除批处理文件中的前导零
SET /a N = 00027
上面给我的输出是八进制数的十进制值。然后我在网上找到this solution。
SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10
这似乎是工作,是给输出。是否有更简单的方法来修剪批处理文件中的前导零?
在我的应用程序中,我得到一个具有前导零的数字。我正在修剪前导零并获取实际的数字。我尝试使用/a
开关,它将分配的右侧视为算术表达式。所以,我想:删除批处理文件中的前导零
SET /a N = 00027
上面给我的输出是八进制数的十进制值。然后我在网上找到this solution。
SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10
这似乎是工作,是给输出。是否有更简单的方法来修剪批处理文件中的前导零?
您发现的方法非常好。它支持高达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"
它可以做同样的事情用一个单行中,IF语句替换||
。如果没有迭代,FOR/F语句会产生无声错误。
set n=000000000000000000000000000000000000000000000000000027
(for /f "tokens=* delims=0" %%N in ("%n%") do set "n=%%N")||set "n=0"
exit命令是相当不错的,在结算前导零:
>set n=0000890
>cmd /c exit /b %n%
>echo %errorlevel%
890
有了这个,你可以使用数高达32位整数的限制和一段代码是非常小的,尽管附加呼叫cmd.exe可能会损害性能。
+1,好的方法,但你需要知道的限制ERRORLEVEL是一个有符号的32位整数,值在-2147483648和2147483647之间。超过这些限制将被转换为限制范围内的一个例如,EXIT 4000000000报告为ERRORLEVEL -294967296。 – dbenham
如果只有删除所有零的问题,你可以做这样的:
> SET n=00000002304650620000.23094400
> SET n=%n:0=%
2346562.23944
Err,在* no *点的问题没有指出它是前导零被移除,所以这个答案是关于如对于这个问题很有用,就好像我发布了一个千层面的食谱:-) – paxdiablo
不,我能找到。 :-)问题是,正如你所看到的,没有跟随'x'的前导零表示你正在使用一个八进制数('0x0027'表示一个十六进制数)。删除它的唯一方法是连接左侧的非零值,使其看起来像是一个十进制值,然后除去添加的量。 (你可以看到在操作中使用一个已知的无效值支持的数字格式,比如'set/a N = d/1',它会产生'无效的数字。数字常量是十进制(17),十六进制(0x11),或者八进制(021)“。 –
您找到了一种可以满足您需求的单线解决方案。您还需要什么?:) – mrt
另请参阅:http://www.robvanderwoude.com/battech_leadingzero.php –