String aus PDF Datei als Dateinamenszusatz für eben diese PDF Datei
Bastle schon einige Zeit an einer Batch rum mit der ich mir einiges an Handarbeit ersparen will.
Zu Verarbeiten sind PDF Dateien die per Mail kommen. Die Dateien werden per Extraktor in einen Ordner kopiert. Der Dateiname ist immer:
"PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
Die PDF wird per pdftotxt in Text umgewandelt.
In der PDF Datei steht eine Nummer die vor dem Dateinamen gesetzt werden müsste:
"40123456-xxx0" (x =0-9)
Das Ergebnis soll also so aussehen:
"40123456-xxx0 PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
In dem Ordner liegen 1-xx Dateien.
Ich bin damit mal angefangen, sieht sicher nicht schön aus, aber für eine Datei funktioniert es. Liegen mehrere Dateien im Ordner wird nur eine Datei umbenannt (ist klar das das so nicht geht).
Kann man das geschreibsel brauchen, oder muss ein ganz neuer Ansatz her.
Ein Auszug aus der PDF:
Zum zweiten Teil.
der Teil "blablaba1 blablaba2 blablaba3" müsste auch noch mit in den Dateinamen, sollte dann so aussehen:
"40123456-0020 blablaba1 blablaba2 blablaba3 PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
0010" "blablaba1 blablaba2 blablaba3" "1,00 etc.
Trennzeichen wären also nur mehr als ein Leerzeichen, "blablaba1 blablaba2 blablaba3 " kann ein Text von ein paar Buchstaben bis wenige Worte sein, also leider nicht fest zu beziffern.
Ist das so möglich? Ich komme auf jeden Fall nicht mehr wirklich weiter.
Danke im Voraus
Zu Verarbeiten sind PDF Dateien die per Mail kommen. Die Dateien werden per Extraktor in einen Ordner kopiert. Der Dateiname ist immer:
"PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
Die PDF wird per pdftotxt in Text umgewandelt.
In der PDF Datei steht eine Nummer die vor dem Dateinamen gesetzt werden müsste:
"40123456-xxx0" (x =0-9)
Das Ergebnis soll also so aussehen:
"40123456-xxx0 PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
In dem Ordner liegen 1-xx Dateien.
Ich bin damit mal angefangen, sieht sicher nicht schön aus, aber für eine Datei funktioniert es. Liegen mehrere Dateien im Ordner wird nur eine Datei umbenannt (ist klar das das so nicht geht).
Kann man das geschreibsel brauchen, oder muss ein ganz neuer Ansatz her.
rem StartPfad ohne abschließenden \ angeben!
set "Quellverzeichnis=C:\script\pdf2txt"
set "Quelldatei=*.pdf"
set "Pufferverzeichnis=C:\script\pdf2txt\buffer"
set "sFullname=C:\script\pdf2txt\*pdf"
set "SuchString=Auftragsnummer:"
for %%i in ("%sFullname%") do set sFILE=%%~ni%%~xi
for %%i in (%Quellverzeichnis%\%Quelldatei%) do (C:\script\pdf2txt\pdftotext.exe -layout "%%i"
findstr "%SuchString%" "%Quellverzeichnis%\%%~ni.txt">%Pufferverzeichnis%\info.log
)
for /f "Tokens=2,4" %%a in (%Pufferverzeichnis%\info.log) do ren "%Quellverzeichnis%\*.pdf" "%%a-%%b-%sFILE%"
Ein Auszug aus der PDF:
0010 blablaba1 blablaba2 blablaba3 1,000 ST xxxx,xx EUR 1ST
Auftragsnummer: 40123456 / 0020
Zum zweiten Teil.
der Teil "blablaba1 blablaba2 blablaba3" müsste auch noch mit in den Dateinamen, sollte dann so aussehen:
"40123456-0020 blablaba1 blablaba2 blablaba3 PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
0010" "blablaba1 blablaba2 blablaba3" "1,00 etc.
Trennzeichen wären also nur mehr als ein Leerzeichen, "blablaba1 blablaba2 blablaba3 " kann ein Text von ein paar Buchstaben bis wenige Worte sein, also leider nicht fest zu beziffern.
Ist das so möglich? Ich komme auf jeden Fall nicht mehr wirklich weiter.
Danke im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 166065
Url: https://administrator.de/forum/string-aus-pdf-datei-als-dateinamenszusatz-fuer-eben-diese-pdf-datei-166065.html
Ausgedruckt am: 23.12.2024 um 12:12 Uhr
25 Kommentare
Neuester Kommentar
moin und willkommen im Club,
ich verstehe deinen Ansatz nur halb...
zeilen 3-6 sind irgendwie doppelmoppel?
Zeile 9 überflüssig?
Die Schleife um Zeile 12 wird solange abgeabrbeitet, wie pdffe gefunden werden und dann wird die letzte und nur die umbenamst?
Dann hast du keine Abfrage, ob es zu einer PDF bereits eine Txt gibt - da du die umbenamst "so" auch eher fragwürdig.
Also solltest du nur die pdffe anzapfen, die du nicht bereits mit Namensmuster versehen hast.
Und das du leerzeichen im Dateinamen haben willst - kann ich nicht verstehen, ich bin aber schon älter und versteh immer weniger
Bitte - du bist neu und daher verzeihe ich dir beide Böcke - den Grußlosen und das vorausdanke
Beides mag ich und ein paar andere nicht.
Gruß
ich verstehe deinen Ansatz nur halb...
zeilen 3-6 sind irgendwie doppelmoppel?
Zeile 9 überflüssig?
Die Schleife um Zeile 12 wird solange abgeabrbeitet, wie pdffe gefunden werden und dann wird die letzte und nur die umbenamst?
Dann hast du keine Abfrage, ob es zu einer PDF bereits eine Txt gibt - da du die umbenamst "so" auch eher fragwürdig.
Also solltest du nur die pdffe anzapfen, die du nicht bereits mit Namensmuster versehen hast.
Und das du leerzeichen im Dateinamen haben willst - kann ich nicht verstehen, ich bin aber schon älter und versteh immer weniger
Danke im Voraus
Bitte - du bist neu und daher verzeihe ich dir beide Böcke - den Grußlosen und das vorausdanke
Beides mag ich und ein paar andere nicht.
Gruß
Aloha,
ich denke, den ersten Teil wirst du selber hinbekommen (dafür gibt es ja reichlich Anschauungsmaterial im Forum), zum zweiten Teil könnte ich dir eine Möglichkeit anbieten:
Nur ein kleines Testschnipselchen, das eventuell umständlich ist aber passen sollte.
Da du .txt aus den PDF erzeugst, ist es natürlich sinnvoll dann auch die Information aus der .txt auszulesen.
greetz André
P.S.: Sollte sich die Stückzahl mehrstelligen schönes Wort *gg*, kann es je nach Formatierung sein, dass
edit gut mit ein wenig
P.P.S.: Das
ich denke, den ersten Teil wirst du selber hinbekommen (dafür gibt es ja reichlich Anschauungsmaterial im Forum), zum zweiten Teil könnte ich dir eine Möglichkeit anbieten:
@echo off & setlocal enabledelayedexpansion
for /f "tokens=1,2* delims=," %%i in ('type %temp%\bla.txt ^|findstr "ST"') do set "var=%%i"
set "var=!var:~20,-7!"
echo !var!
pause
goto :eof
Nur ein kleines Testschnipselchen, das eventuell umständlich ist aber passen sollte.
Da du .txt aus den PDF erzeugst, ist es natürlich sinnvoll dann auch die Information aus der .txt auszulesen.
greetz André
P.S.: Sollte sich die Stückzahl mehrstelligen schönes Wort *gg*, kann es je nach Formatierung sein, dass
var
dann noch ein paar Leerzeichen enthält ...edit gut mit ein wenig
if
lässt sich auch noch das Letztere eindeutig setzen ^_^P.P.S.: Das
enabledelayedexpansion
ist diesbezüglich eigentlich kein muss, da es auch mit set "var=%var:~20,-7%"
und diesbezüglich echo %var%
funktioniert aber irgendwie habe ich so das Gefühl, dass man hier in der Gesamtheit am Ende sowieso die Erweiterung benötigen wird.
salü,
dann "probieren" wir das mal... - wobei probieren heist, ich sitze vor nem Mac.
Bastla hat einen schönen Weg, den er "processline" nennt - den würde ich evtl. auch nehmen.
sorry, aber mehr ist grad - und dann noch vorm Mac - nicht drin.
Gruß
dann "probieren" wir das mal... - wobei probieren heist, ich sitze vor nem Mac.
Der Dateiname ist immer:
"PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
"PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
for /f %%a in ('dir /b PO*.pdf') do echo %%a
Bastla hat einen schönen Weg, den er "processline" nennt - den würde ich evtl. auch nehmen.
cd /d pfad wo die dateien sind
for /f "delims=" %%a in ('dir /b PO*.pdf') do call :processlines %%~na
goto :eof
:processlines
echo %1
C:\script\pdf2txt\pdftotext.exe -layout "%1.pdf"
if not exist %1.txt echo fehler bei Datei %1
for /f "Tokens=2,4" %%a in ('findstr "Auftragsnummer:"') do (
ren %1.pdf "%%a-%%b.pdf
ren %1.txt "%%a-%%b.txt
)
sorry, aber mehr ist grad - und dann noch vorm Mac - nicht drin.
Gruß
moin,
Das ist der Inhalt von einer Datei po123.pdf
Die dazugehörige 123.cmd hat den Inhalt
und das kommt heraus:
Ergo "müsste" der umbenamseritis Block so lauten:
und siehe da...
wobei ich die ehrlich rate - benams die dateien nicht so krumm um - Jahr.monat.tag ist in meinen Augen besser
Und Jahr-monat-tag schöner.
- lustigerweise hab ich einen Pfad C:\script\pdf2txt von daher kann ich das (und die morgigen kalten Böcke) ganz gut nachstellen...
Auftragsnummer: 40123456 / 0020
Die dazugehörige 123.cmd hat den Inhalt
cd /d c:\script\pdf2txt\
for /f "delims=" %%a in ('dir /b PO*.pdf') do call :processlines "%%~na"
goto :eof
:processlines
echo %~1
C:\script\pdf2txt\pdftotext.exe -layout "%~1.pdf"
if not exist "%~1.txt" echo fehler bei Datei %~1
for /f "Tokens=2,4" %%a in ('findstr "Auftragsnummer" %~1.txt') do (
echo ren "%~1.pdf" "%%a-%%b.pdf"
echo ren "%~1.txt" "%%a-%%b.txt"
pause
)
und das kommt heraus:
C:\script\pdf2txt>(
echo ren "po123.pdf" "40123456-0020.pdf"
echo ren "po123.txt" "40123456-0020.txt"
pause
)
ren "po123.pdf" "40123456-0020.pdf"
ren "po123.txt" "40123456-0020.txt"
Drücken Sie eine beliebige Taste . . .
- jetzt willst du aber
Das Ergebnis soll also so aussehen:
"40123456-xxx0 PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
"40123456-xxx0 PO Bestellung 145123456 vom tt.mm.jjjj.pdf"
Ergo "müsste" der umbenamseritis Block so lauten:
echo ren "%~1.pdf" "%%a-%%b PO Bestellung %%a vom %date:~-10,2%.%date:~-7,2%.%date:~-4%.pdf"
echo ren "%~1.txt" "%%a-%%b PO Bestellung %%a vom %date:~-10,2%.%date:~-7,2%.%date:~-4%.txt"
und siehe da...
C:\script\pdf2txt>(
echo ren "po123.pdf" "40123456-0020 PO Bestellung 40123456 vom 12.05.2011.pdf"
echo ren "po123.txt" "40123456-0020 PO Bestellung 40123456 vom 12.05.2011.txt
"
pause
)
ren "po123.pdf" "40123456-0020 PO Bestellung 40123456 vom 12.05.2011.pdf"
ren "po123.txt" "40123456-0020 PO Bestellung 40123456 vom 12.05.2011.txt"
Drücken Sie eine beliebige Taste . . .
wobei ich die ehrlich rate - benams die dateien nicht so krumm um - Jahr.monat.tag ist in meinen Augen besser
Und Jahr-monat-tag schöner.
grützi,
jetzt haben wir das Doppelwoppermenü....
naja, komm erst mal in mein Alter und dann verstehst du mehr und vergißt noch mehr...
Die Idee zuhause ein M$ Maschine (wenn auch virtuell) hinzustellen - die mag ich aber garnicht - daher keine ungetesteten Schnippsel mehr.
Gruß
jetzt haben wir das Doppelwoppermenü....
- schau dir meine Zeile 10 an:
for /f "Tokens=2,4" %%a in ('findstr "Auftragsnummer" %~1.txt') do (
- und die von Skyemugen
for /f "Tokens=2,4" %%a in ('type "%~1.txt" ^|findstr "Auftragsnummer"') do (
- innerhalb einer in () mußt du manche Zeichen maskieren - dazu ist ^ das da.
- und viele Wege führen nach Rom
dir |more ist ein ziemlich alter Hut und bedeutet nix anders als
befehl1|befehl2
befehl1|befehl2
wobei PO Bestellung 145123456 vom tt.mm.jjjj.pdf
naja, komm erst mal in mein Alter und dann verstehst du mehr und vergißt noch mehr...
Die Idee zuhause ein M$ Maschine (wenn auch virtuell) hinzustellen - die mag ich aber garnicht - daher keine ungetesteten Schnippsel mehr.
Gruß
Moin don.redhorse,
willkommen im Forum.
Das Pipe-Zeichen"|" bedeutet die Weiterleitung einer Ausgabe als eine neue Eingabe für ein nachverarbeitendes Programm.
Einfache Beispiele wären ein "DIR | MORE" oder eben ein "TYPE datei.xyz| SORT" vom CMD-Prompt aus.
Beide Befehle machen genau das, was man/frau als Laie so erwartet ... kannst du aber beide gerne nachturnen am CMD-Prompt.
Wenn diese Befehle - so wie im Beispiel oben- nicht direkt vom CMD-Prompt aufgerufen werden, sondern in einer Aufruf-Anweisung einer FOR-Anweisung,
also dem, was in einfachen Anführungszeichen in der Klammer steht,
dann muss das Pipe-Zeichen mit einem Caret=^ maskiert werden, damit es erst später (in der Aufruf-Anweisung) wirksam wird.
Grüße
Biber
willkommen im Forum.
Das Pipe-Zeichen"|" bedeutet die Weiterleitung einer Ausgabe als eine neue Eingabe für ein nachverarbeitendes Programm.
Einfache Beispiele wären ein "DIR | MORE" oder eben ein "TYPE datei.xyz| SORT" vom CMD-Prompt aus.
Beide Befehle machen genau das, was man/frau als Laie so erwartet ... kannst du aber beide gerne nachturnen am CMD-Prompt.
Wenn diese Befehle - so wie im Beispiel oben- nicht direkt vom CMD-Prompt aufgerufen werden, sondern in einer Aufruf-Anweisung einer FOR-Anweisung,
also dem, was in einfachen Anführungszeichen in der Klammer steht,
dann muss das Pipe-Zeichen mit einem Caret=^ maskiert werden, damit es erst später (in der Aufruf-Anweisung) wirksam wird.
Grüße
Biber
Zitat von @60730:
grützi,
jetzt haben wir das Doppelwoppermenü....
grützi,
jetzt haben wir das Doppelwoppermenü....
Ähm, T-Mo,
in deiner ursprünglichen Version stand kein Dateibezug (und schon gar kein %~1) ... da stand nur
'findstr "Auftragsnummer"'
wenn ich mich recht erinnere ^_^ (darum kam auch nur ein Endloscursorblinken)greetz André
und das ägyptische ^ Flöten | ist bei mir inzwischen schon so ein Standard geworden
Zitat von @don.redhorse:
Moin!
Meine Frage jetzt, wie bekomme ich die überflüssigen Leerzeichen raus?
Moin!
Meine Frage jetzt, wie bekomme ich die überflüssigen Leerzeichen raus?
Das ist einfach und trotzdem kompliziert - ok ich hatte noch keinen Kaffee...
C:\>set bsp=t e s t
C:\>echo "%bsp%"
"t e s t"
C:\>set bsp=%bsp: = %
C:\>echo "%bsp%"
"t e s t"
C:\>set bsp=%bsp: = %
C:\>echo "%bsp%"
"t e s t"
C:\>set bsp=%bsp: = %
C:\>echo "%bsp%"
"t e s t"
C:\>
Sind Sie identisch gibt es keine doppelten Spaces mehr.
Wäre jetz meine Spontane Idee, ohne Kaffee im Kopp
Grüße
zurück.
moin,
wird jetzt alles bisschen.... (Kaffee hatte ich zwar schon - aber die Wirkung würgt nicht mehr..)
wird jetzt alles bisschen.... (Kaffee hatte ich zwar schon - aber die Wirkung würgt nicht mehr..)
- mach doch - am besten an den allerletzten Kommentar anfügen - eine Demo - so wie ich in type=plain.
Welche Abfragen sind noch sinnvoll?
- naja spontan - ist die datei geöffnet, gibts den neuen namen schon vorher - bzw. wurde sie umbenamst.
Servus,
Yupp - ich hab den Überblick verloren - eine(n) meiner letzten Antworten gelesen und einen Groben Bock gefunden, den du in deiner Zeile 12 übernommen hast...
Oder andersherum - bitte mach ein neues Thema auf mit der aktuellen Version und verlinke zu diesem Beitrag - denn hier findet man "nix" mehr in Reih und Glied.
Wie gesagt, es "funktioniert", sieht aber echt nicht mehr schön aus.
Yupp - ich hab den Überblick verloren - eine(n) meiner letzten Antworten gelesen und einen Groben Bock gefunden, den du in deiner Zeile 12 übernommen hast...
12. for /f "tokens=3,4,5 delims= " %%a in ("%Dateiname%") do set Datei=%%a %%b %%c
12. for /f "tokens=3,4,5 delims= " %%a in ("%Dateiname%") do set "Datei"="%%a %%b %%c"
Oder andersherum - bitte mach ein neues Thema auf mit der aktuellen Version und verlinke zu diesem Beitrag - denn hier findet man "nix" mehr in Reih und Glied.
Grüße aus dem verregneten Münster
zurück