wie fülle ich in einer Windows-Cmd-Batchdatei (.bat) einen numerischen Wert ein, sodass ein angegebener Wert im Bereich von 0..99 in eine Zeichenfolge im Bereich von "00" bis "99" umgewandelt wird. Das heißt Ich möchte führende Nullen für Werte unter 10 haben.
Es gibt einen zweistufigen Prozess, den Sie verwenden können:
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%
Jetzt enthält TEMP
den aufgefüllten Wert. Wenn die Wahrscheinlichkeit besteht, dass der Anfangswert von X
mehr als zwei Ziffern enthält, müssen Sie prüfen, ob Sie ihn nicht versehentlich abgeschnitten haben:
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%
Wichtige Notiz:
Diese Lösung erstellt oder überschreibt die Variablen PADDED
und VERIFY
. Jedes Skript, das die Werte von Variablen festlegt, die nach dem Beenden nicht persistent sein sollen, sollte in SETLOCAL
- und ENDLOCAL
-Anweisungen eingefügt werden, um zu verhindern, dass diese Änderungen von außen sichtbar sind.
Wenn Sie sicher sind, dass die Anzahl der Ziffern in Ihrer ursprünglichen Zahl immer <= 2 ist, dann
set "x=0%x%"
set "x=%x:~-2%"
Wenn die Anzahl 2 Ziffern überschreiten kann und Sie 2 Ziffern auffüllen möchten, aber Werte, die größer als 99 sind, nicht abschneiden, dann
setlocal enableDelayedExpansion
if "%x%" equ "%x:~-2%" (
set "x=0%x%"
set "x=!x:~-2!"
)
Oder ohne verzögerte Erweiterung mit einer Zwischenvariablen
set paddedX=0%x%
if "%x%" equ "%x:~-2%" set "x=%paddedX:~-2%"
Das Schöne an den oben genannten Algorithmen ist, dass es einfach ist, die Polsterung auf eine beliebige Breite zu erweitern. Um beispielsweise die Breite 10 aufzufüllen, voranstellen Sie einfach 9 Nullen und behalten die letzten 10 Zeichen bei
set "x=000000000%x%"
set "x=%x:~-10%"
, Um das Abschneiden zu verhindern
set paddedX=000000000%x%
if "%x%" equ "%x:~-10%" set "x=%paddedX:~-10%"
Die einzelne Zeile
IF 1%Foo% LSS 100 SET Foo=0%Foo%
erhalten Sie, was Sie für Zahlen in dem von Ihnen angegebenen Bereich wünschen. Werte in der Teilmenge 0-9 werden nicht geändert, wenn sie bereits einzeln aufgefüllt sind.
In früheren Antworten wurden alle vorhandenen Methoden erläutert, um einen Wert mit linken Nullen aufzufüllen. Ich möchte nur einen kleinen Trick hinzufügen, mit dem ich das einfacher gemacht habe. Was in den vorangegangenen Antworten nicht genug erwähnt wurde, ist, dass in den meisten Fällen der aufgefüllte Wert innerhalb einer Schleife erhöht wird und dass der aufgefüllte Wert nur zur Anzeige (oder ähnlicher Aufgaben) verwendet wird. wie umbenannt). So zeigen Sie beispielsweise Werte von 00 bis 99 an:
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
Wenn dies der Fall ist, kann der Wert der Variablen sowohl für die Steuerung der Schleife als auch für die Anzeige von verwendet werden, ohne dass der aufgefüllte Wert geändert wird, wenn seine Grenzen entsprechend übersetzt werden. So zeigen Sie beispielsweise Werte von 00 bis 99 an:
set x=100
:loop
rem Show padded value
echo %x:~-2%
set /A x+=1
if %x% leq 199 goto loop
Diese Methode funktioniert auch mit einer beliebigen Anzahl von linken Nullen zum Auffüllen.
Antonio
In diesem Beispiel wird eine for
-Schleife zur Veranschaulichung verwendet. Die Logik ist jedoch dieselbe, auch wenn Sie sie ohne die Schleife verwenden würden. Nur echo
einen 0
vor, wenn die Zahl weniger als 10 ist.
setlocal enabledelayedexpansion
for /l %%a in (1,1,40) do (
set n=%%a
if !n! lss 10 (
echo 0!n!
) else (
echo !n!
)
)
pause >nul
OK GUYS Ich habe eine Lösung gefunden, die so einfach wie möglich komprimiert wird.
@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
dadurch wird Ihre Count-Up-Nummer mit 4 Ziffern angezeigt. Der Code kann jedoch so geändert werden, dass er zwei Ziffern verwendet (siehe unten).
@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
wenn Sie es als anzeigbare Einzelvariable festlegen wollen ...
@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
wenn Sie möchten, dass es in Sekunden zählt ...
@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
ich hoffe das war eine große hilfe ^^
@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