PDF nach deren Inhalt umbenennen, den Namen immer auslesen
Neuen Namen aus gleicher Zeile/Stelle auslesen und umbenennen
Erstmal hallo an alle Profis hier !
Bin völlig neu hier und hoffe ihr könnt mir helfen.
Ich hab ähnliche Batches hier drin gefunden, habs aber nicht geschafft diese an meine Erfordernisse anzupassen.
Hab von Batch Programming leider so gut wie keine Ahnung.
Also:
Ich habe viele pdf Files in einem Verzeichnis, diese sind immer gleich strukturiert.
Leider sind die Dateinamen einfach von 1 aufwärts numeriert was nicht auf den Inhalt hinweist, darum bräuchte ich diese Umbenennung.
Der neue Dateiname wäre in Zeile 3 zu finden.
Zuerst kommen 20 Zeichen, also normale Schrift, dann ist ein Tab und dann steht der gewünschte Name welcher maximial 7 Zeichen lang ist, minial 3 Zeichen.
Der Name selbst besteht aus Zahlen und einem "-", also z.b. 1234-45, oder auch weniger, 12-34.
Ich hoffe das geht irgendwie, würde mir echt sehr helfen.
mfg
Virtu-Al
Erstmal hallo an alle Profis hier !
Bin völlig neu hier und hoffe ihr könnt mir helfen.
Ich hab ähnliche Batches hier drin gefunden, habs aber nicht geschafft diese an meine Erfordernisse anzupassen.
Hab von Batch Programming leider so gut wie keine Ahnung.
Also:
Ich habe viele pdf Files in einem Verzeichnis, diese sind immer gleich strukturiert.
Leider sind die Dateinamen einfach von 1 aufwärts numeriert was nicht auf den Inhalt hinweist, darum bräuchte ich diese Umbenennung.
Der neue Dateiname wäre in Zeile 3 zu finden.
Zuerst kommen 20 Zeichen, also normale Schrift, dann ist ein Tab und dann steht der gewünschte Name welcher maximial 7 Zeichen lang ist, minial 3 Zeichen.
Der Name selbst besteht aus Zahlen und einem "-", also z.b. 1234-45, oder auch weniger, 12-34.
Ich hoffe das geht irgendwie, würde mir echt sehr helfen.
mfg
Virtu-Al
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 102278
Url: https://administrator.de/contentid/102278
Ausgedruckt am: 16.11.2024 um 13:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo,
also was nicht geht: Du kannst aus einer PDF-Datei keine Zeile (oder Zeichen oder so) auslesen.
Was Du machen kannst: mach Dir eine Excel-Tabelle mit drei Spalten.
1. Spalte: move
2. Spalte: alter Dateiname
3. Spalte: neuer Dateiname
dann speicherst Du die Datei ab mit der Endung .txt, benennst nach .bat um und dann musst Du im Editor alle Tabulatorzeichen durch Leerzeichen ersetzen.
Das ist dann ein Batch-Programm, das alle Dateien umbenennt.
Die Überlegung geht davon aus, dass es irgendein Schema gibt, wie die Dateinamen zusammenhängen und sowas lässt sich in Excel leicht machen.
Gruß
Markus
also was nicht geht: Du kannst aus einer PDF-Datei keine Zeile (oder Zeichen oder so) auslesen.
Was Du machen kannst: mach Dir eine Excel-Tabelle mit drei Spalten.
1. Spalte: move
2. Spalte: alter Dateiname
3. Spalte: neuer Dateiname
dann speicherst Du die Datei ab mit der Endung .txt, benennst nach .bat um und dann musst Du im Editor alle Tabulatorzeichen durch Leerzeichen ersetzen.
Das ist dann ein Batch-Programm, das alle Dateien umbenennt.
Die Überlegung geht davon aus, dass es irgendein Schema gibt, wie die Dateinamen zusammenhängen und sowas lässt sich in Excel leicht machen.
Gruß
Markus
Hallo Virtu-Al und willkommen im Forum!
Wenn es die beschriebene Textdatei gibt und die Position des gesuchten Strings verlässlich ist, könnte der Batch dazu (ungetestet) so aussehen:
Soferne die Umwandlung in eine Textdatei auch per Batch möglich ist, könntest Du die Zeile 10 so schreiben:
wobei mit "PDF2TXT" natürlich der Aufruf des Konvertierungsprogrammes gemeint ist (die PDF-Datei kann dabei als %1 übergeben werden).
Die "echo" am Beginn der letzten beiden Zeilen sollen das gefahrlose Testen des Batches erlauben, da so die Befehle für das Umbenennen bzw das Löschen der Textdatei nur angezeigt werden. Nach dem Entfernen des "echo" passiert's dann wirklich ...
Nicht ganz klar ist mir übrigens, wie ein Name mit weniger al 7 Zeichen in der Textdatei dargestellt wird - werden die restlichen Stellen zB mit Leerzeichen aufgefüllt? Falls es (dadurch) zum weiteren Text eine eindeutige Abgrenzung durch Leerzeichen gibt, ließe sich der Name so extrahieren:
Grüße
bastla
[Edit] Zeile 5 ergänzt [/Edit]
Wenn es die beschriebene Textdatei gibt und die Position des gesuchten Strings verlässlich ist, könnte der Batch dazu (ungetestet) so aussehen:
@echo off & setlocal
set "Verzeichnis=D:\Ein Verzeichnis mit vielen PDF"
pushd "%Verzeichnis%"
for /f "delims=" %%i in ('dir /b/a-d *.pdf') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
if not exist "%~n1.txt" echo Keine txt-Datei fuer %1 gefunden. & goto :eof
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" %1^|findstr /b "11:"') do set "Zeile=%%b"
set Name=%Zeile:~63,7%
echo ren %1 "%Name%.pdf"
echo del "%~n1.txt"
goto :eof
if not exist "%~n1.txt" PDF2TXT || (Textdatei fuer %1 konnte nicht erzeugt werden! & goto :eof)
Die "echo" am Beginn der letzten beiden Zeilen sollen das gefahrlose Testen des Batches erlauben, da so die Befehle für das Umbenennen bzw das Löschen der Textdatei nur angezeigt werden. Nach dem Entfernen des "echo" passiert's dann wirklich ...
Nicht ganz klar ist mir übrigens, wie ein Name mit weniger al 7 Zeichen in der Textdatei dargestellt wird - werden die restlichen Stellen zB mit Leerzeichen aufgefüllt? Falls es (dadurch) zum weiteren Text eine eindeutige Abgrenzung durch Leerzeichen gibt, ließe sich der Name so extrahieren:
for /f "tokens=1*" %%a in ("%Zeile:~63%") do set "Name=%%b"
bastla
[Edit] Zeile 5 ergänzt [/Edit]
Hallo nochmal,
ich hab mich missverständlich ausgedrückt. Die Exceltabelle soll als Textdatei abgespeichert werden. Diese wird in eine .bat Datei umbenannt und stellt dann das Programm dar. Dieses muss im gleichen Verzeichnis liegen wie Deine PDF-Dateien und wird dann ausgeführt.
Wenn z.B. eine Datei 34-345.pdf umbenannt werden soll nach 45-432.pdf, dann lautet die Zeile in der Excel-Datei:
Hoffentlich ist es jetzt klarer geworden
Gruß
Markus
ich hab mich missverständlich ausgedrückt. Die Exceltabelle soll als Textdatei abgespeichert werden. Diese wird in eine .bat Datei umbenannt und stellt dann das Programm dar. Dieses muss im gleichen Verzeichnis liegen wie Deine PDF-Dateien und wird dann ausgeführt.
Wenn z.B. eine Datei 34-345.pdf umbenannt werden soll nach 45-432.pdf, dann lautet die Zeile in der Excel-Datei:
move | 34-345.pdf | 45-432.pdf |
Gruß
Markus
@64748
Fussnote:
Sollte zufällig gerade kein Excel zur Hand sein, ließe sich diese Textdatei aber auch mit einem handelsüblichen Editor erstellen und mit der Endung *.bat statt *.txt abspeichern.
Oder übersehe ich im Moment irgendwie den Charme des Excel-Schlenkers?
Ich meine nur - wenn Virtu-al (BTW: willkommen im Forum) nun extra dafür ein Excel bei eBay ersteigert.... er könnte sich hinterher ärgern....
Grüße
Biber
Fussnote:
Sollte zufällig gerade kein Excel zur Hand sein, ließe sich diese Textdatei aber auch mit einem handelsüblichen Editor erstellen und mit der Endung *.bat statt *.txt abspeichern.
Oder übersehe ich im Moment irgendwie den Charme des Excel-Schlenkers?
Ich meine nur - wenn Virtu-al (BTW: willkommen im Forum) nun extra dafür ein Excel bei eBay ersteigert.... er könnte sich hinterher ärgern....
Grüße
Biber
Hallo zusammen,
also das mit Excel ist nur eine Möglichkeit, ich hatte mal auf einem Server 500 Benutzer anzulegen, deren Profile zu kopieren usw., da hab ich das so mit Excel gemacht. Mir ist natürlich klar, dass das mit Batch-Programmierung wenig zu tun hat, aber es funktioniert ganz gut.
Ehrlich gesagt würde ich in dem speziellen Fall evtl. auch mit vim arbeiten. Wahrscheinlich ist es Sinnvoll sich schonmal eine Textdatei mit allen umzubenennenden Dateien anzulegen:
@bastla: ich würde alle Dateien erstmal in einem anderen Verzeichnis sichern, aber das versteht sich von selbst.
Gruß
Markus
also das mit Excel ist nur eine Möglichkeit, ich hatte mal auf einem Server 500 Benutzer anzulegen, deren Profile zu kopieren usw., da hab ich das so mit Excel gemacht. Mir ist natürlich klar, dass das mit Batch-Programmierung wenig zu tun hat, aber es funktioniert ganz gut.
Ehrlich gesagt würde ich in dem speziellen Fall evtl. auch mit vim arbeiten. Wahrscheinlich ist es Sinnvoll sich schonmal eine Textdatei mit allen umzubenennenden Dateien anzulegen:
dir /B *.pdf > pdf-Dateien.txt
@bastla: ich würde alle Dateien erstmal in einem anderen Verzeichnis sichern, aber das versteht sich von selbst.
Gruß
Markus
@64748
Grüße
bastla
ich würde alle Dateien erstmal in einem anderen Verzeichnis sichern, aber das versteht sich von selbst.
Auch wenn ich davon ausgehe, dass sich das auch für Virtu-Al von selbst versteht, war's mir den Hinweis wert ...da hab ich das so mit Excel gemacht. Mir ist natürlich klar, dass das mit Batch-Programmierung wenig zu tun hat, aber es funktioniert ganz gut.
Es muss ja auch gar nicht Batch sein (und Excel kann in ähnlichen Situationen durchaus sinnvoll eingesetzt werden - besonders wenn Benutzer keine Programmier-/Scriptingkenntnisse haben), aber das eigentliche Problem ist ja das Auslesen des neuen Namens (der Rest ist nur eine einfache Schleife mit ev ein paar Verzierungen ) - insofern wird es aber nicht so viel nützen, die Dateiliste vorweg zu erzeugen ...Grüße
bastla
Hallo nochmal,
das Problem ist ja gerade, dass das Auslesen des Dateinamens aus einer PDF-Datei nicht funktioniert. Aber wenn es irgendeine Regel gibt, nach der die Namen aufgebaut sind, dann kann man das auch programmieren.
Virtu-Al schreibt ja, dass die neuen Dateinamen aus Zahlen bestehen, da denke ich natürlich, dass diese Zahlen auch nach einer bestimmten Regel aufgebaut sind... Er braucht ja nur eine Tabelle, in der jeweils der alte und der neue Dateiname in einer Zeile stehen. Und da wäre die obige Dateiliste immerhin eine Grundlage.
Genug der Theorie...
Gruß
Markus
das Problem ist ja gerade, dass das Auslesen des Dateinamens aus einer PDF-Datei nicht funktioniert. Aber wenn es irgendeine Regel gibt, nach der die Namen aufgebaut sind, dann kann man das auch programmieren.
Virtu-Al schreibt ja, dass die neuen Dateinamen aus Zahlen bestehen, da denke ich natürlich, dass diese Zahlen auch nach einer bestimmten Regel aufgebaut sind... Er braucht ja nur eine Tabelle, in der jeweils der alte und der neue Dateiname in einer Zeile stehen. Und da wäre die obige Dateiliste immerhin eine Grundlage.
Genug der Theorie...
Gruß
Markus
schau dir mal das an. Vielleicht bringt es dich weiter
Programm
Programm
Hallo,
das wäre ganu das was ich suche, wenn ich den Befehl jedoch starte bekomme ich folgende Meldung
"Keine txt-Datei fuer " Datenträger in Laufwerk C: is OS" gefunden.
"Keine txt-Datei fuer " Volumenseriennummer: ..........." gefunden.
"Keine txt-Datei fuer " Verzeichnis von C:\Temp" gefunden.
"Keine txt-Datei fuer " 12.08.2013 09:56 100.254 0000.pdf" gefunden.
...
es liegen die 0000.pdf und die 0000.txt im Verzeichnis
muss da vielleicht anstatt dem dir in Zeile 5 was anderes oder zusätzlich rein.
Bitte um Hilfe
Danke
LG
Andy
das wäre ganu das was ich suche, wenn ich den Befehl jedoch starte bekomme ich folgende Meldung
"Keine txt-Datei fuer " Datenträger in Laufwerk C: is OS" gefunden.
"Keine txt-Datei fuer " Volumenseriennummer: ..........." gefunden.
"Keine txt-Datei fuer " Verzeichnis von C:\Temp" gefunden.
"Keine txt-Datei fuer " 12.08.2013 09:56 100.254 0000.pdf" gefunden.
...
es liegen die 0000.pdf und die 0000.txt im Verzeichnis
muss da vielleicht anstatt dem dir in Zeile 5 was anderes oder zusätzlich rein.
Bitte um Hilfe
Danke
LG
Andy
Zitat von @bastla:
Hallo Virtu-Al und willkommen im Forum!
Wenn es die beschriebene Textdatei gibt und die Position des gesuchten Strings verlässlich ist, könnte der Batch dazu
(ungetestet) so aussehen:
Hallo Virtu-Al und willkommen im Forum!
Wenn es die beschriebene Textdatei gibt und die Position des gesuchten Strings verlässlich ist, könnte der Batch dazu
(ungetestet) so aussehen:
@echo off & setlocal
> set "Verzeichnis=D:\Ein Verzeichnis mit vielen PDF"
>
> pushd "%Verzeichnis%"
> for /f "delims=" %%i in ('dir *.pdf') do call :ProcessFile "%%i"
> popd
> goto :eof
>
> :ProcessFile
> if not exist "%~n1.txt" echo Keine txt-Datei fuer %1 gefunden. & goto :eof
> for /f "tokens=1* delims=:" %%a in ('findstr /n "^" %1^|findstr /b "11:"') do set
> "Zeile=%%b"
> set Name=%Zeile:~63,7%
> echo ren %1 "%Name%.pdf"
> echo del "%~n1.txt"
> goto :eof
>
Hallo Bastla,
hatte es inzwischen schon gefunden, stand sogar ähnlich im Beitrag von hmarkus
aber kann es sein dass in dem Code noch was nicht stimmt.
versuche in meinem Fall aus Zeile 8 Spalte Spalte 17 bis 19 auszulesen
hab im Batchfile in Zeile 11 findstr /b "11: auf 8: und
63,7 auf 17,3 geändert aber die Datei wird immer auf .pdf umbenannt.
was mach ich falsch
Danke
LG
Andy
hatte es inzwischen schon gefunden, stand sogar ähnlich im Beitrag von hmarkus
dir /B *.pdf > pdf-Dateien.txt
aber kann es sein dass in dem Code noch was nicht stimmt.
versuche in meinem Fall aus Zeile 8 Spalte Spalte 17 bis 19 auszulesen
hab im Batchfile in Zeile 11 findstr /b "11: auf 8: und
63,7 auf 17,3 geändert aber die Datei wird immer auf .pdf umbenannt.
was mach ich falsch
Danke
LG
Andy