Dateinamen prüfen und evtl. umbenennen
Hallo Forum,
ich habe in einem Ordner mehrere pdf-Dateien die wie folgt aussehen:
OB1.pdf
OB82.pdf
OB100.pdf
FC1.pdf
FC20.pdf
FC100.pdf
UDT1.pdf
UDT2.pdf
usw...
Wie oben schon geschrieben möchte ich diese Dateien nun umbenennen und zwar wie folgt.
Ich möchte überprüfen welche Anzahl an Zahlen der Dateiname enthält und diese entsprechend
mit Nullen auffüllen, so dass immer 3 Zahlen im Dateinamen enthalten sind. Die Nullen sollen
immer vor der vorhandenen Zahl eingefügt werden.
Es sollte danach dann so ausshen
OB001.pdf
OB082.pdf
OB100.pdf
FC001.pdf
FC020.pdf
FC100.pdf
UDT001.pdf
UDT002.pdf
Kann mir da jemand Helfen?
Danke und Gruss
Norbert
ich habe in einem Ordner mehrere pdf-Dateien die wie folgt aussehen:
OB1.pdf
OB82.pdf
OB100.pdf
FC1.pdf
FC20.pdf
FC100.pdf
UDT1.pdf
UDT2.pdf
usw...
Wie oben schon geschrieben möchte ich diese Dateien nun umbenennen und zwar wie folgt.
Ich möchte überprüfen welche Anzahl an Zahlen der Dateiname enthält und diese entsprechend
mit Nullen auffüllen, so dass immer 3 Zahlen im Dateinamen enthalten sind. Die Nullen sollen
immer vor der vorhandenen Zahl eingefügt werden.
Es sollte danach dann so ausshen
OB001.pdf
OB082.pdf
OB100.pdf
FC001.pdf
FC020.pdf
FC100.pdf
UDT001.pdf
UDT002.pdf
Kann mir da jemand Helfen?
Danke und Gruss
Norbert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 150228
Url: https://administrator.de/contentid/150228
Ausgedruckt am: 13.11.2024 um 09:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Norbert,
die folgende Batchdatei verarbeitet alle Pdf-Dateien im aktuellen Verzeichnis deren Namen eine beliebige Anzahl Buchstaben gefolgt von mindestens einer Ziffer beinhaltet.
Wenn die Ausgabe auf dem Bildschirm korrekt erscheint, das Echo in der letzten Zeile (und ggfs den Pause Befehl) entfernen.
Auf Wunsch erläutere ich gerne den Algorhytmus.
Gruß
LotPings
Edit: Einige Änderungen eingebaut (unter anderem Fehler bei 2. Durchlauf mit führenden Nullen)
die folgende Batchdatei verarbeitet alle Pdf-Dateien im aktuellen Verzeichnis deren Namen eine beliebige Anzahl Buchstaben gefolgt von mindestens einer Ziffer beinhaltet.
:: Trail#3pl.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::
@Echo off
For /f "delims=" %%A in (
'Dir /B/A-D *.pdf ^|findstr /i "[a-z][a-z]*[0-9][0-9]*\.pdf" '
) Do For /f "tokens=1 delims=0123456789" %%B in (
"%%~nA"
) do Call :Proc "%%~fA" "%%B"
Pause
goto :Eof
:Proc
Set "Name=%~n1"
Set "Prefix=%~2"
Call Set Zahl=100%%Name:%Prefix%=%%
If %Zahl% GTR 10099 goto :Eof
Echo Ren %1 "%Prefix%%Zahl:~-3%%~x1"
Ren %1 "%Prefix%%Zahl:~-3%%~x1"
Wenn die Ausgabe auf dem Bildschirm korrekt erscheint, das Echo in der letzten Zeile (und ggfs den Pause Befehl) entfernen.
Auf Wunsch erläutere ich gerne den Algorhytmus.
Gruß
LotPings
Edit: Einige Änderungen eingebaut (unter anderem Fehler bei 2. Durchlauf mit führenden Nullen)
Moin Hausen und Lordchen,
wir befinden uns in einem Forum, in dem ich mich über ganz oft über den abschliessenden Kommentar eines Fragestellers freue,
wenn aus diesem Kommentar ein "Ahhh, JETZT hab ich's verstanden!" durchklingt.
Ist mir 100 mal lieber als ein "Danke, klappt."
Der Unterbereich "Batch & Shell", in dem wir uns hier befinden, ist zudem ein Unter-Unterbereich von "Entwicklung".
Und für mich gehört zum "Entwickeln" auch das Verstehen (bzw. das Verständlich-Machen) der Strategie, des Algorithmus dazu.
Von daher, @77559, bin ich natürlich spontan begeistert von der guten Idee und der eleganten Umsetzung.
Aber mit dem Angebot "Auf Wunsch erläutere ich gerne..." eher unglücklich.
Ich würde die letzte Zeile noch dahingehend abändern, dass nicht versucht wird, Dateien umzubenamsen, die schon der "neuen" Namenskonvention entsprechen.
Also:
unterschied (zuerst mit alter Zeile, zweiter Durchlauf mit neuer letzter Zeile):
Grüße
Biber
wir befinden uns in einem Forum, in dem ich mich über ganz oft über den abschliessenden Kommentar eines Fragestellers freue,
wenn aus diesem Kommentar ein "Ahhh, JETZT hab ich's verstanden!" durchklingt.
Ist mir 100 mal lieber als ein "Danke, klappt."
Der Unterbereich "Batch & Shell", in dem wir uns hier befinden, ist zudem ein Unter-Unterbereich von "Entwicklung".
Und für mich gehört zum "Entwickeln" auch das Verstehen (bzw. das Verständlich-Machen) der Strategie, des Algorithmus dazu.
Von daher, @77559, bin ich natürlich spontan begeistert von der guten Idee und der eleganten Umsetzung.
Aber mit dem Angebot "Auf Wunsch erläutere ich gerne..." eher unglücklich.
Ich würde die letzte Zeile noch dahingehend abändern, dass nicht versucht wird, Dateien umzubenamsen, die schon der "neuen" Namenskonvention entsprechen.
Also:
::.....
:: Statt bisher letzte Zeile:
::echo Ren %1 "%Prefix%%Zahl:~-3%%~x1"
::-- jetzt neu letzte Zeile
if "%~n1" NEQ "%Prefix%%Zahl:~-3%" echo Ren %1 "%Prefix%%Zahl:~-3%%~x1"
unterschied (zuerst mit alter Zeile, zweiter Durchlauf mit neuer letzter Zeile):
>Lotpinx_Trail#3pl.cmd
if "test1" NEQ "test001" Ren "F:\schnipsel\test1.pdf" "test001.pdf"
if "test21" NEQ "test021" Ren "F:\schnipsel\test21.pdf" "test021.pdf"
if "test231" NEQ "test231" Ren "F:\schnipsel\test231.pdf" "test231.pdf"
Drücken Sie eine beliebige Taste . . .
(=21:09:42 F:\schnipsel=)
>Lotpinx_Trail#3pl.cmd
Ren "F:\schnipsel\test1.pdf" "test001.pdf"
Ren "F:\schnipsel\test21.pdf" "test021.pdf"
Drücken Sie eine beliebige Taste . . .
Grüße
Biber
Hallo Norbert,
Ich gehe mal davon aus das du den Echo-Befehl entfernt hattest?
Ansonsten hört es sich nach einem Rechte/Schreibschutz-Problem an, schau mal mit attrib *.pdf nach.
@Biber, stimme dir vorbehaltlos zu, war gestern etwas Erklärungsmüde
Zur Erläuterung:
die erste For-Schleife in Z3 nudelt alle vom Dir kommenden und von dem regulären Ausdruck des Find auf Buchstaben/Ziffern gefilterten pdf-Dateien durch,
die zweite For-Schleife in Z5 trennt das Prefix (=token 1) von der folgenden Zahl ab indem alle Ziffern als delimiter gesetzt werden.
Mit dem kompletten Dateinamen als Argument 1 und dem ermittelten Prefix als Argument 2 wird die Subroutine Proc aufgerufen.
In der Sub :Proc wird nur der Namensbestandteil der Variable Name und Arg2 der Variable Prefix zugewiesen
Der Pseudo Call in Z13 dient in Verbindung mit gedoppelten %-Zeichen zur verzögerten Auswertung von
Z13 musste ich ändern weil der alte Set /A Probleme mit bereits enthaltenen führenden Nullen hatte
Da durch den Find sichergestellt ist, das wirklich nur Ziffern in der Zahl sind, und ich nur umbenennen will, wenn weniger als 3 Stellen vorhanden sind hänge ich vor die Zahl
Gruß
LotPings
Ich gehe mal davon aus das du den Echo-Befehl entfernt hattest?
Ansonsten hört es sich nach einem Rechte/Schreibschutz-Problem an, schau mal mit attrib *.pdf nach.
@Biber, stimme dir vorbehaltlos zu, war gestern etwas Erklärungsmüde
Zur Erläuterung:
die erste For-Schleife in Z3 nudelt alle vom Dir kommenden und von dem regulären Ausdruck des Find auf Buchstaben/Ziffern gefilterten pdf-Dateien durch,
die zweite For-Schleife in Z5 trennt das Prefix (=token 1) von der folgenden Zahl ab indem alle Ziffern als delimiter gesetzt werden.
Mit dem kompletten Dateinamen als Argument 1 und dem ermittelten Prefix als Argument 2 wird die Subroutine Proc aufgerufen.
In der Sub :Proc wird nur der Namensbestandteil der Variable Name und Arg2 der Variable Prefix zugewiesen
Der Pseudo Call in Z13 dient in Verbindung mit gedoppelten %-Zeichen zur verzögerten Auswertung von
%%NAME:%Prefix%=%%
dies löscht den ermittelten Prefix aus dem Namen so das nur die Zahl übrig bleibt.Z13 musste ich ändern weil der alte Set /A Probleme mit bereits enthaltenen führenden Nullen hatte
Da durch den Find sichergestellt ist, das wirklich nur Ziffern in der Zahl sind, und ich nur umbenennen will, wenn weniger als 3 Stellen vorhanden sind hänge ich vor die Zahl
100
, ist Zahl größer als 10099 brauche ich nichts zu tun und verlasse die Sub. Dies erübrigt dann auch Bibers zusätzliche If-Abfrage.Gruß
LotPings
Hallo Norbert,
wie ich in der Erläuterung schrieb, ist in der obigen Version die zusätzliche If-Abfrage in Z16 Hyperfluid = überflüssig.
Bereits 3-Stellige Zahlen passieren nicht durch die Zeile 14.
Gruß
LotPings
wie ich in der Erläuterung schrieb, ist in der obigen Version die zusätzliche If-Abfrage in Z16 Hyperfluid = überflüssig.
Bereits 3-Stellige Zahlen passieren nicht durch die Zeile 14.
Gruß
LotPings