REM initial setup
SET X=5
REM pad with your desired width - 1 leading zeroes
SET PADDED=0%X%
REM slice off any zeroes you don't need -- BEWARE, this can truncate the value
REM the 2 at the end is the number of desired digits
SET PADDED=%PADDED:~-2%
REM did we truncate the value by mistake? if so, undo the damage
SET /A VERIFY=1%X% - 1%PADDED%
IF NOT "%VERIFY%"=="0" SET PADDED=%X%
REM finally update the value of X
SET X=%PADDED%
set x=0
:loop
rem Pad x value, store it in padded
set padded=0%x%
set padded=%padded:~-2%
rem Show padded value
echo %padded%
set /A x+=1
if %x% leq 99 goto loop
@echo off
title pad numbers
set num=0
set zero= 000
:loop
@set /a num=%num%+1
if /i %num% GTR 9 set zero= 00
if /i %num% GTR 99 set zero= 0
if /i %num% GTR 999 set zero=
echo %zero%%num%
goto loop
这将使用4位数显示您的累计数。但代码可以更改为使用2位数,如下所示。
@echo off
title pad numbers
set num=0
set zero= 0
:loop
@set /a num=%num%+1
if /i %num% GTR 9 set zero=
echo %zero%%num%
goto loop
如果你想把它设置成一个可显示的单变量...
@echo off
title pad numbers
set num=0
set zero= 0
:loop
@set /a num=%num%+1
if /i %num% GTR 9 set zero=
set %zero%%num%=number
echo %number%
goto loop
如果你想让它以秒计的话。
@echo off
title pad numbers
set num=0
set zero= 0
:loop
@set /a num=%num%+1
if /i %num% GTR 9 set zero=
set %zero%%num%=number
echo %number%
ping localhost -n 2 >nul
goto loop
@echo off
rem .
rem counter example - with and without padding (up to 260 leading 0s which should be enough for most filenames)
rem .
rem we assume values given are valid
rem additional error checking could be done to make sure they are numbers
rem and to ensure that starting is less than ending
rem and that the number of ending digits is not greater than the number of padding digits
rem .
if "%2"=="" (
echo.
echo usage: %~nx0 [starting number] [ending number] [pad]
echo example: %~nx0 0 19 will output numbers 0 to 19 each on a new line
echo example: %~nx0 3 12 8 will output numbers 3 to 12 each on a new line padded to 8 digits
echo.
goto end
)
rem .
setlocal enabledelayedexpansion
if "%3"=="" (
for /l %%x in (%1, 1, %2) do (
echo.%%x
)
) else (
set "mynum="
for /l %%x in (%1, 1, %2) do (
call set "mynum=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000%%x"
call set "mynum=%%mynum:~-%3%%"
call echo.%%mynum%%
)
)
:end
8条答案
按热度按时间fcwjkofz1#
您可以使用两个阶段的过程:
现在
PADDED
保存填充后的值,如果X
的初始值有可能超过两位数,你需要检查一下你没有不小心把它截断:重要说明:
此解决方案会建立或覆写变数
PADDED
和VERIFY
。任何设定变数值的指令码,如果在终止后不打算保存,都应该放在SETLOCAL
和ENDLOCAL
陈述式内,以防止这些变更被外界看到。lyfkaqu12#
如果您确信原始数字的位数始终〈= 2,则
如果数字可能超过2位数,而您希望填充到2位数,但不截断大于99的值,则
或者不使用延迟扩展,使用中间变量
上述算法的优点在于,将填充扩展到任意宽度是很简单的。
防止截断
ctehm74n3#
单线
将为指定范围内的数字获取所需的值。如果子集0-9中的值已经是单填充的,则它不会更改这些值。
qzlgjiam4#
前面的答案已经解释了所有现有的方法来填补一个值与左零;我只想增加一个小技巧,我曾经用一种更简单的方式来实现这个目的。在前面的答案中没有提到的是,在大多数情况下,* 要填充的值在循环中递增 *,而填充的值 * 只是用来显示它 *(或类似的任务,如重命名)。例如,要显示从00到99的值:
如果是这种情况,变量的值可以用于控制循环 * 和 * 显示其填充值,如果其限制被适当转换,则不进行修改。例如,要显示从00到99的值:
此方法也适用于要填充的任意数量的左零。
安东尼奥
cwdobuhd5#
好了,伙计们,我找到了一个解决办法,尽可能简单地压缩它。
这将使用4位数显示您的累计数。但代码可以更改为使用2位数,如下所示。
如果你想把它设置成一个可显示的单变量...
如果你想让它以秒计的话。
我希望这是一个很大的帮助^^
s71maibg6#
这个例子使用了一个
for
循环来演示,但是即使你不使用这个循环,逻辑也是一样的。如果数字小于10,只需要在echo
前面加上一个0
。unhi4e5o7#
hjqgdpho8#
这就容易多了: