2016-05-25 2 views
0

Ich muss mehrere Dateien in einem Ordner umbenennen. Dateinamen sind entweder 6 Ziffern lang oder 9 Ziffern lang und ich muss alle Dateinamen mit führenden Nullen auffüllen, um sie insgesamt 16 Ziffern lang zu machen.Dateien in einem Ordner mit linken Pad-Nullen umbenennen

Zum Beispiel, wenn der Dateiname 123456.jpg dann sollte es zu 000000000.jpg umbenannt werden, und wenn es 123456789.jpg ist, dann sollte es zu 000000.jpg umbenannt werden.

Die maximale Länge der Ziffern sollte immer 16 Ziffern betragen.

Es können 100 oder mehr Dateien im Ordner vorhanden sein.

Ich habe versucht, so etwas, das ich weiß, ist nicht der Code für diese Aufgabe erforderlich. Aber ich begann mit diesem und brauche Hilfe, um voranzukommen.

@echo off 
setlocal enableextensions enabledelayedexpansion 
rem iterate over all JPG files: 
for %%f in (C:\Documents\Pictures\pic\*.jpg) do (
    rem store file name without extension 
    set FileName=%%~nf 
    rem Add leading zeroes: 
    set FileName=00000000000!FileName! 
    rem Add extension again 
    set FileName=!FileName!%%~xf 
    rem Rename the file 
    rename "%%f" "!FileName!" 
) 

Ich würde ein Batch-Skript bevorzugen. Wenn das nicht möglich ist, wird auch ein VB-Skript akzeptiert.

Basierend auf Stephan Empfehlung, habe ich den Code wie folgt aktualisiert. Dieser Code weist dem Dateinamen 123456.jpg jedoch keine Nullen voran.

Ich möchte hier hinzufügen, dass mein Wissen über Batch-Skript-Codierung sehr begrenzt ist. Der Code, den ich versuche, ist nur der erste Versuch, aber was ich will und wurde auch in der Frage erwähnt, dass Skript Prepad Nullen unabhängig von der Dateiname ist 6 Ziffern lang oder 9 Ziffern lang und machen es insgesamt von 16 Ziffern lang. Ich denke, selbst wenn der Code, den ich versuche, zu funktionieren beginnt, würde ich immer noch nicht das bekommen, wonach ich suche.

Wenn ich diesen Code ausführen, dann tut es nichts.

@echo off 
setlocal enableextensions enabledelayedexpansion 
rem iterate over all JPG files: 
for %%f in (C:\Documents\Pictures\pic\*.jpg) do (
    rem store file name without extension 
    set FileName=%%~nf 
    rem Add leading zeroes: 
    set FileName=0000000000!FileName! 
    set FileName=!FileName:~-16! 
    rem Rename the file 
    rename "%%f" "!FileName!" 
    set FileName=!FileName!%%~xf 
    rem Rename the file 
    rename "%%f" "!FileName!" 
) 

Aktualisiert Code, die 6 Ziffern langen Dateinamen lange zu 16 Ziffern konvertiert:

@echo off 
setlocal enableextensions enabledelayedexpansion 
rem iterate over all JPG files: 
for %%f in (C:\Documents\Pictures\pic\*.jpg) do (
    rem store file name without extension 
    set FileName=%%~nf 
    rem Add leading zeroes: 
    set FileName=000000000!FileName! 
    set FileName=!FileName:~-16! 
    set FileName=!FileName!%%~xf 
    rem Rename the file 
    rename "%%f" "!FileName!" 
) 
+1

Sie fügen die Nullen hinzu, aber Sie schneiden nicht für 16 Zeichen danach. 'set FileName = output_! Dateiname: ~ -16! %% ~ xf' sollte tun (anstelle der letzten' set' Zeile). – Stephan

+0

Die Beschreibung und Ihr Code stimmen nicht überein! Sie erwähnen nicht das Präfix 'output_', das Ihr Code zu behalten versucht; also bitte update deinen post entsprechend ... – aschipfl

+0

@aschipfl Ich habe gerade meinen Code aktualisiert. Entschuldigung dafür – adit

Antwort

0

Anstatt sich Gedanken über die ursprüngliche Länge des Dateinamens, gerade genug Nullen an die vor dem Dateinamen hinzufügen und schneiden Sie die resultierende Zeichenfolge auf sechzehn Zeichen:

... 
set FileName=%%~nf 
set FileName=0000000000000000!FileName! 
set FileName=!FileName:~-16!%%~xf 
...