2 String aus PDF auslesen und diesen zum Umbenamsen benutzen
Hallo zusammen,
ich habe folgendes Problem. Mir werden PDF Dateien geliefert, die einen nicht aussagefähigen Namen haben. Diese möchte ich gerne umbennen.
Der neue Name steht in den PDF Dateien an zwei Stellen, immer an denselben Positionen. Mit Hilfe des Forums hier habe ich mir schon einiges zusammengesucht (aus verschiedenen Threads):
Als Folge, wandelt das Batch meine PDF-Dateien in *.txt und benennt dann diese Textdatei um. Das funktioniert: das Programm findet also den/die richtigen Namen.
Ich weiß aber nicht, wie ich das "Grundgerüst" anpassen muss, damit auch die *.pdf umbenannt wird... zu sagen ich hätte Grundkenntnisse wäre übertrieben, aber ich bin gut im Probieren, nur hier komme ich leider nicht weiter.
Bin über jede Hilfe dankbar.
Danke fürs Lesen.
Gruß
Ingo
ich habe folgendes Problem. Mir werden PDF Dateien geliefert, die einen nicht aussagefähigen Namen haben. Diese möchte ich gerne umbennen.
Der neue Name steht in den PDF Dateien an zwei Stellen, immer an denselben Positionen. Mit Hilfe des Forums hier habe ich mir schon einiges zusammengesucht (aus verschiedenen Threads):
@echo off & setlocal
set "Ordner=d:\1"
set "Maske=*.txt"
set ZNr=5
set Sp1=0
set L1=20
set ZNr2=3
set Sp2=0
set L2=20
For /f "Delims=" %%A in ('Dir /B /A-D ".\*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt"
Goto :Eof
:ProcPDF
pdftotext.exe -raw %1
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b /a-d "%Maske%"') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
set "Zeile="
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" %1^|findstr /b "%ZNr%:"') do set "Zeile=%%j"
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" %1^|findstr /b "%ZNr2%:"') do set "Zeile2=%%j"
if not defined Zeile echo %~1: Nummer nicht gefunden! & goto :eof
call set "NameNeu=%%Zeile:~%Sp1%,%L1%%%%%Zeile2:~%Sp2%,%L2%%%"
ren %1 "%NameNeu%%~x1"
goto :eof
Als Folge, wandelt das Batch meine PDF-Dateien in *.txt und benennt dann diese Textdatei um. Das funktioniert: das Programm findet also den/die richtigen Namen.
Ich weiß aber nicht, wie ich das "Grundgerüst" anpassen muss, damit auch die *.pdf umbenannt wird... zu sagen ich hätte Grundkenntnisse wäre übertrieben, aber ich bin gut im Probieren, nur hier komme ich leider nicht weiter.
Bin über jede Hilfe dankbar.
Danke fürs Lesen.
Gruß
Ingo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 305449
Url: https://administrator.de/forum/2-string-aus-pdf-auslesen-und-diesen-zum-umbenamsen-benutzen-305449.html
Ausgedruckt am: 11.05.2025 um 13:05 Uhr
8 Kommentare
Neuester Kommentar
Moin ingo101,
willkommen im Forum.
[OT] Die Schreibweise "Umbennen" wie in deiner Überschrift sorgt immer für alberne Moderatorenkommentare und führt außerdem zum Inkrementieren des internen running gag counters rgc.
Ändere das bitte.
[/OT]
Wenn dein Batch soweit funktioniert bis auf das Umbenamsen der PDF-Datei, dann ergänze das in
Sonstige Anmerkungen:
- Das
- Ich durchschaue nicht ganz, ob sich alles in einem Ordner abspielt oder in zweien.
Wenn nur ein Ordner involviert ist, dann sollte das pushd/popd auch nur einmal und nicht in jedem call :ProcXXX-Block stattfinden.
Grüße
Biber
willkommen im Forum.
[OT] Die Schreibweise "Umbennen" wie in deiner Überschrift sorgt immer für alberne Moderatorenkommentare und führt außerdem zum Inkrementieren des internen running gag counters rgc.
Ändere das bitte.
[/OT]
Wenn dein Batch soweit funktioniert bis auf das Umbenamsen der PDF-Datei, dann ergänze das in
:Processfile
.@echo off & setlocal
set "Ordner=d:\1"
set "Maske=*.txt"
set ZNr=5
set Sp1=0
set L1=20
set ZNr2=3
set Sp2=0
set L2=20
REM Anmerkung: woher weisst du hier, dass du dich im richtigen Start-Verzeichnis befindest???
For /f "Delims=" %%A in ('Dir /B /A-D ".\*.pdf"') Do Call :ProcPDF "%%A" "%%~nA.txt"
Goto :Eof
:ProcPDF
pdftotext.exe -raw %1
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b /a-d "%Maske%"') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
set "Zeile="
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" %1^|findstr /b "%ZNr%:"') do set "Zeile=%%j"
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" %1^|findstr /b "%ZNr2%:"') do set "Zeile2=%%j"
if not defined Zeile echo %~1: Nummer nicht gefunden! & goto :eof
call set "NameNeu=%%Zeile:~%Sp1%,%L1%%%%%Zeile2:~%Sp2%,%L2%%%"
REM hier auch die Original-PDF umbenennen:
ren %~n1.pdf "%NameNeu%.pdf"
ren %1 "%NameNeu%%~x1"
goto :eof
Sonstige Anmerkungen:
- Das
call :ProcPDF
bekommt zwei Parameter übergeben, aber verwertet nur einen?- Ich durchschaue nicht ganz, ob sich alles in einem Ordner abspielt oder in zweien.
Wenn nur ein Ordner involviert ist, dann sollte das pushd/popd auch nur einmal und nicht in jedem call :ProcXXX-Block stattfinden.
Grüße
Biber
Moin ingo101,
Ändere bitte mal zum Testen das "echo off" oben in ein "echo on" und bau ein paar "pause" und Info-Zeilen (echo Bin jetzt in :ProcPDF, Parameter sind [%*] ) in den Code.
Ich seh es doch mit bloßem Auge nicht von hier aus, wo der Syntaxfehler sich versteckt.
Zum zweiten nochmal die Frage: spielt sich denn nun alles in deinem Ordner "D:\1\" ab oder liegen die Roh-PDFs woanders?
Danach können wir diese Mehrere-Versionen-sammeln-Klamotte angehen.
Wobei du da erstmal zu Ende überlegen solltest, wie denn der Plan aussieht.
Bevor du da die %NameNeu%.PDFs/Txts mit einem Suffix _01, _02 hochzählst, solltest du ein Umbenennen in einem Namen mit einem Prafix/Suffix bestehend aus dem Datum erwägen - was sinnvoller wäre zum Wiederfinden.
Also %NameNeu%_2015-05.25.* oder 2015-05-15_%NameNeu%.*
Aber wie geschrieben, erstmal eins zu Ende (s.o)
Grüße
Biber
Zitat von @ingo101:
Eine Zusatzfrage, die gerade aufgetaucht. Gibt es eine Möglichkeit, das, wenn eine Datei mit gleichen Namen bereits existiert, die nächste als *_1.pdf etc. oer ähnliches benannt wird?
Ja, aber einen Schritt nach dem anderen.Eine Zusatzfrage, die gerade aufgetaucht. Gibt es eine Möglichkeit, das, wenn eine Datei mit gleichen Namen bereits existiert, die nächste als *_1.pdf etc. oer ähnliches benannt wird?
Es erscheint zwar immer noch die Fehlermeldung "Syntax", aber die Dateien werden trotzdem umbenannt.
Das wollen wir doch nicht so lassen, oder?Ändere bitte mal zum Testen das "echo off" oben in ein "echo on" und bau ein paar "pause" und Info-Zeilen (echo Bin jetzt in :ProcPDF, Parameter sind [%*] ) in den Code.
Ich seh es doch mit bloßem Auge nicht von hier aus, wo der Syntaxfehler sich versteckt.
Zum zweiten nochmal die Frage: spielt sich denn nun alles in deinem Ordner "D:\1\" ab oder liegen die Roh-PDFs woanders?
Danach können wir diese Mehrere-Versionen-sammeln-Klamotte angehen.
Wobei du da erstmal zu Ende überlegen solltest, wie denn der Plan aussieht.
Bevor du da die %NameNeu%.PDFs/Txts mit einem Suffix _01, _02 hochzählst, solltest du ein Umbenennen in einem Namen mit einem Prafix/Suffix bestehend aus dem Datum erwägen - was sinnvoller wäre zum Wiederfinden.
Also %NameNeu%_2015-05.25.* oder 2015-05-15_%NameNeu%.*
Aber wie geschrieben, erstmal eins zu Ende (s.o)
Grüße
Biber
Moin ingo101,
okay, der Fehler lässt sich lokalisieren.
Da die Original-Dateinamen auch Leerzeichen im Bateinamen enthlaten, muss dieser Name als Paramter verwendet öglichst immer in Anführungszeichen angegeben werden.
Beispiel: wenn der Name bzw der Parameter 1 so aussieht:
Mein Fehler bzw mein Geschlamper.
Zu dem Vorhande Versionen nicht überschreiben, sondern als mit Versionsnummern umbenennen" mach bitte eine neue Frage auf.
Hier liest keiner außer uns beiden mit, und ich bin jetzt gleich auf der Autobahn und dann im Wochenende
Grüße
Biber
okay, der Fehler lässt sich lokalisieren.
Da die Original-Dateinamen auch Leerzeichen im Bateinamen enthlaten, muss dieser Name als Paramter verwendet öglichst immer in Anführungszeichen angegeben werden.
Beispiel: wenn der Name bzw der Parameter 1 so aussieht:
Bin jetzt in :ProcessFile, Parameter sind ["03172 KolkwitzMax Muster2.txt"]
...dann muss die momentane Zeile 35 in deinem letzten Kommentar so aussehen:ren "%~n1.pdf" "%NameNeu%.pdf"
Mein Fehler bzw mein Geschlamper.
Zu dem Vorhande Versionen nicht überschreiben, sondern als mit Versionsnummern umbenennen" mach bitte eine neue Frage auf.
Hier liest keiner außer uns beiden mit, und ich bin jetzt gleich auf der Autobahn und dann im Wochenende
Grüße
Biber