PDFs in Verzeichnis per Batch umbenennen
Guten Tag!
kann bitte jemand helfen?
Ich möchte eine Batch-Datei erstellen, welche mir wie folgt Dateien verarbeitet
1. Gehe zu Verzeichnis C:\xy
2. lösche alle Dateien (in allen Unterverzeichnissen von xy) die mit einem Punkt anfangen (Bsp: "._xy_12_0025.pdf")
3. bennene alle übrigen Dateien (in allen Unterverzeichnissen von xy) um (Präfix weg und führende Nullen auch)
(Bsp:
alt: "xy_12_0025.pdf"
neu: "25.pdf")
Vielen Dank
kann bitte jemand helfen?
Ich möchte eine Batch-Datei erstellen, welche mir wie folgt Dateien verarbeitet
1. Gehe zu Verzeichnis C:\xy
2. lösche alle Dateien (in allen Unterverzeichnissen von xy) die mit einem Punkt anfangen (Bsp: "._xy_12_0025.pdf")
3. bennene alle übrigen Dateien (in allen Unterverzeichnissen von xy) um (Präfix weg und führende Nullen auch)
(Bsp:
alt: "xy_12_0025.pdf"
neu: "25.pdf")
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 115582
Url: https://administrator.de/contentid/115582
Ausgedruckt am: 20.11.2024 um 15:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo Sommerzeit,
welche Batch-Kenntnisse hast denn schon?
Wie sieht dein angefangener Batch aus?
Es ist nachhaltiger, jemandem "das Fischen zu lehren als ihm einen Fisch zu schenken",.
Aber sei's drum 2 Fische
Wenn die Ausgabe korrekt erscheint das "Echo" vor dem "Del" rausnehmen damit der Befehl auch ausgeführt wird.
Das gleiche gilt hier für das "Echo" vor dem "Ren".
Wenn du "Fischen lernen" willst, kannst du gerne Fragen stellen.
Gruß
LotPings
Edit in zweitem Batch Zeile "02 set Base=C:\xy" eingefügt.
Edit2: weitere Fehler ausgebessert: %1 statt %0, goto RenPDF2
Edit3: ein weiteres vergessenes "
welche Batch-Kenntnisse hast denn schon?
Wie sieht dein angefangener Batch aus?
Es ist nachhaltiger, jemandem "das Fischen zu lehren als ihm einen Fisch zu schenken",.
Aber sei's drum 2 Fische
@Echo Off&SetLocal
set Base=C:\xy
Pushd %Base%
For /f "Delims=" %%A in ('Dir /B /S /A-D ".*.pdf" ') Do Echo Del "%%A"
Pause
Popd
@Echo Off&SetLocal
set Base=C:\xy
Pushd %Base%
For /f "Delims=" %%A in ('Dir /B /S /A-D "*.pdf"') Do Call :RenPdf "%%~fA"
Pause
Popd
Goto :Eof
:RenPdf
Set "NewName=%~nx1"
:RenPdf2
If "%NewName%" NEQ "%NewName:*_=%" set "NewName=%NewName:*_=%"&Goto :RenPdf2
if "%NewName:~,1%"=="0" set "NewName=%NewName:~1%"&goto :RenPdf2
echo Ren "%~f1" "%NewName%"
Das gleiche gilt hier für das "Echo" vor dem "Ren".
Wenn du "Fischen lernen" willst, kannst du gerne Fragen stellen.
Gruß
LotPings
Edit in zweitem Batch Zeile "02 set Base=C:\xy" eingefügt.
Edit2: weitere Fehler ausgebessert: %1 statt %0, goto RenPDF2
Edit3: ein weiteres vergessenes "
Hallo Sommerzeit,
tut mir leid da waren noch Fehler drin, habe ich oben ausgebessert.
Bitte in der neuen Zeile 2 das richtige Basisverzeichnis einsetzen.
Gruß
LotPings
tut mir leid da waren noch Fehler drin, habe ich oben ausgebessert.
Bitte in der neuen Zeile 2 das richtige Basisverzeichnis einsetzen.
Gruß
LotPings
Meine Version hatte noch einen Fehler den ich zwar erkannt aber nicht übertragen hatte.
Sollte jetzt gehen.
Gruß
Sollte jetzt gehen.
Gruß
Ich gehe mal davon aus das du weisst wie du die Hilfe der einzelnen Befehle in einer CMD-Shell mit:
abfragen kannst.
Das "Delims=" bedeutet die Zeile komplett (nicht getrennt) in die Variable %%A zu schreiben.
In der Subroutine :RenPDF (Zeile 08) wird die als %%A übergebene Zeile behandelt wie das Erste an eine Batch übergebene kommandozeilen-Argument. %1.
Zeile 09 übernimmt mit Hilfe de Tilde ~ Funktion nur den Namen und die Erweiterung aus der Kompletten Pfadangabe (siehe Call /? oder For /?).
Zeile 10 dient als Label für die Goto Sprünge aus den beiden folgenden Befehlszeilen.
Zele 11 benutzt die String Replace Funktion (erklärt in Set /?) um zu vergleichen ob Unterstriche in NewName enthalten sind, wenn ja werden alle Zeichen vom Anfang bis einschließlich des Unterstriches ausgetauscht gegen nichts - also gelöscht. Wenn also ein Austausch stattgefunden hat wird erneut probiert ob noch ein weiterer Unterstrich vorhanden ist.
Zeile 12 prüft ob das erste zeichen eine 0 ist, wenn ja NewName ersetzen durch NewName ab zweiter Stelle und erneut probieren. Da ja alle Unterstriche schon weg sind kann ich den gleichen Label benutzen.
Zeile 13 Rename ausführen und
..habe fertig!
Gruß
LotPings
Befehl /?
abfragen kannst.
For /F
in Zeile 4 wertet die (in einer nicht sichtbaren SUB-Shell ausgeführte) Ausgabe von Dir /B/S/A-D *.PDF
Zeile für Zeile aus und übergibt den Wert an die Sub Routine Call :RenPDF.Das "Delims=" bedeutet die Zeile komplett (nicht getrennt) in die Variable %%A zu schreiben.
In der Subroutine :RenPDF (Zeile 08) wird die als %%A übergebene Zeile behandelt wie das Erste an eine Batch übergebene kommandozeilen-Argument. %1.
Zeile 09 übernimmt mit Hilfe de Tilde ~ Funktion nur den Namen und die Erweiterung aus der Kompletten Pfadangabe (siehe Call /? oder For /?).
Zeile 10 dient als Label für die Goto Sprünge aus den beiden folgenden Befehlszeilen.
Zele 11 benutzt die String Replace Funktion (erklärt in Set /?) um zu vergleichen ob Unterstriche in NewName enthalten sind, wenn ja werden alle Zeichen vom Anfang bis einschließlich des Unterstriches ausgetauscht gegen nichts - also gelöscht. Wenn also ein Austausch stattgefunden hat wird erneut probiert ob noch ein weiterer Unterstrich vorhanden ist.
Zeile 12 prüft ob das erste zeichen eine 0 ist, wenn ja NewName ersetzen durch NewName ab zweiter Stelle und erneut probieren. Da ja alle Unterstriche schon weg sind kann ich den gleichen Label benutzen.
Zeile 13 Rename ausführen und
..habe fertig!
Gruß
LotPings