Wie kann ich Zahlen in einer Batch-FOR-Schleife mit Nullen auffüllen?

Wie kann ich Zahlen in einer Batch-FOR-Schleife mit Nullen auffüllen?

Ich schreibe eine Batchdatei, um einige Vorgänge auf Remotecomputern in meinem Gebäude auszuführen. Sie haben alle denselben Präfix, aber die Nummer am Ende ändert sich (01–65). Ich habe versucht, einem Online-Tutorial zum Erstellen einer Batchdateischleife auf Zahlenbasis zu folgen, und bin auf Folgendes gestoßen:

FOR /l %%N in (1,1,65) do (
    set HOSTNAMETOUSE=prefix-%%N
    ECHO %HOSTNAMETOUSE%
)

Das funktioniert hervorragend, nachdem 10 erreicht wurde, da es dann zweistellig ist. Was ich brauche, ist, dass die Zahlen 1-9als angezeigt werden 01-09, da dies unserem Benennungsschema entspricht. Im Wesentlichen brauche ich für die ersten 9 Iterationen die einzelne Ziffer einer führenden Null.Wie kann ich dies mit Windows-Batchdateien erreichen?

Antwort1

Ihr geposteter Code kann unmöglich funktionieren, da %HOSTNAMETOUSE%er erweitert wird, wenn die Anweisung analysiert wird, und der gesamte eingeklammerte Block in einem Durchgang analysiert wird, bevor die Schleife ausgeführt wird. Der erweiterte Wert ist also für alle Iterationen konstant.

Sie müssen die verzögerte Erweiterung verwenden, um den Wert zum Ausführungszeitpunkt zu erhalten.

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    set HOSTNAMETOUSE=prefix-%%N
    ECHO !HOSTNAMETOUSE!
)

Jetzt nach Bedarf mit dem Präfix 0 versehen.

Da Sie nie mehr als eine einzelne 0 benötigen, können Sie eine IF-Anweisung verwenden.

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    if %%N lss 10 (set HOSTNAMETOUSE=prefix-0%%N) else set HOSTNAMETOUSE=prefix-%%N
    ECHO !HOSTNAMETOUSE!
)

Das ist jedoch nicht praktisch, wenn Ihre Zahlenbreite mehr als 2 Ziffern beträgt. Eine allgemeinere Lösung besteht darin, eine Zeichenfolge hinzuzufügen vonNNullen mit der gewünschten Länge und verwenden Sie dann eine Teilzeichenfolgenoperation, um dieNganz rechte Ziffern.

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    set "n=00%%N"
    set "HOSTNAMETOUSE=!n:~-2!
    ECHO !HOSTNAMETOUSE!
)

Sie können diese Lösung problemlos auf nahezu jede beliebige Anzahl führender Nullen erweitern.

Antwort2

Ich würde es so machen:

  • Fügen Sie zu jeder Zahl eine 0 hinzu (also 01, aber auch 065).
  • Teilzeichenfolge: Die letzten beiden Zeichen dieser Zeichenfolge

Wie erstellt man einen Teilstring in einer Batchdatei (die letzten beiden Zeichen):

SET string=abcd 
echo %string% 
SET string2=%string:~-2%
echo %string2%

Antwort3

Die Antwort von @dbenham ist nichts Neues. Ich habe lediglich ein paar der Wertevariablen aus der Befehlszeile gesammelt und hier zur Vereinfachung des Kopierens und Einfügens bereitgestellt. Die Quelle liegt ganz bei @dbenham oben:

set first=%1
set last=%2
set len=%3
setlocal EnableDelayedExpansion
FOR /l %%N in (%first%, 1, %last%) do (
    set "n=0000000000000%%N"
    set "padded=!n:~-%len%!
    echo !padded!
)

Antwort4

Verwenden vonZtreeWin, navigieren Sie zum richtigen Verzeichnis, indem Sie drücken \, und drücken Sie dann , Enterum das Verzeichnis aufzurufen, in dem Sie CtrlTdie Dateien, die Sie umbenennen möchten, markieren können, und CtrlRbenennen Sie sie dann in????<0>*.*

Zum Beispiel:

foo-0-bar.jpg -> foo-00-bar.jpg
foo-1-bar.jpg -> foo-01-bar.jpg
foo-2-bar.jpg -> foo-02-bar.jpg
...

Im obigen Beispiel ????stellt es die ersten 4 Zeichen dar (foo-), <0>fügt an der 5. Stelle eine Null ein und *.*stellt den Rest des Dateinamens dar (-bar.jpg), der unverändert bleibt.

Markieren Sie Ihre Dateien mit Tags:

Bildbeschreibung hier eingeben

Umbenennen Ihrer Dateien:

Bildbeschreibung hier eingeben

ZTreeWinist ein leistungsstarker 32-Bit- und 64-Bit-Datei- und Verzeichnismanager im Textmodus, der eng an das legendäre XTreeGold(tm) angelehnt ist, jedoch für die gängigen Betriebssysteme von heute optimiert wurde.

verwandte Informationen