virtu-al
Goto Top

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

Content-Key: 102278

Url: https://administrator.de/contentid/102278

Printed on: April 23, 2024 at 19:04 o'clock

Mitglied: 64748
64748 Nov 20, 2008 at 14:41:03 (UTC)
Goto Top
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
Member: Virtu-Al
Virtu-Al Nov 20, 2008 at 15:38:12 (UTC)
Goto Top
hmmm, werd ich nicht so richtig schlau draus.

danke erstmal für die antwort ;)

Dachte mir schon dass es beim pdf schwierig wird.
Aber die pdf´s zwecks Umbenennung in eine exel oder text Datei zu konvertieren
so dass eine Datei mit gleichem Namen nur einmal als pdf und einmal als txt vorhanden
ist wäre ja kein problem.

12345.pdf - unverändertes Original
12345.txt - aus obigem pdf generiertes txt file in dem
der Name in Zeile 11/Spalte 64 - 71 ist.

Bei sämtlichen so erzeugten txt files wäre der Name immer an der selben stelle und
sollte auf den Dateinamen des pdf angewandt werden.

lg
Member: bastla
bastla Nov 20, 2008, updated at Aug 14, 2013 at 07:33:24 (UTC)
Goto Top
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 /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
Soferne die Umwandlung in eine Textdatei auch per Batch möglich ist, könntest Du die Zeile 10 so schreiben:
if not exist "%~n1.txt" PDF2TXT || (Textdatei fuer %1 konnte nicht erzeugt werden! & goto :eof)
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:
for /f "tokens=1*" %%a in ("%Zeile:~63%") do set "Name=%%b"
Grüße
bastla

[Edit] Zeile 5 ergänzt [/Edit]
Mitglied: 64748
64748 Nov 20, 2008 at 21:40:18 (UTC)
Goto Top
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:
move 34-345.pdf 45-432.pdf
Hoffentlich ist es jetzt klarer geworden face-wink

Gruß

Markus
Member: Biber
Biber Nov 20, 2008 at 22:46:11 (UTC)
Goto Top
@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
Member: bastla
bastla Nov 20, 2008 at 22:56:40 (UTC)
Goto Top
... was ihn übrigens auch ärgern könnte, wäre die Tatsache, dass "move" in einem Batch ziemlich rücksichtslos mit bereits vorhandenen Zieldateien umgeht ...

Grüße
bastla
Member: Virtu-Al
Virtu-Al Nov 21, 2008 at 07:08:24 (UTC)
Goto Top
ahh jetzt ist es mir klar mit excel, keine sorge - ich hab ne version.

Bin grad ein bissl im Streß und werd erst nächste Woche zum Testen kommen.
Vorerst mal danke an alle, ich geb dann (hoffentlich) Erfolgsmeldung wenn ichs durch habe.
Jetzt hab ich mal ne Richtung für meine grauen Zellen ;)

lg
Virtu-Al
Mitglied: 64748
64748 Nov 21, 2008 at 09:21:38 (UTC)
Goto Top
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:
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
Member: bastla
bastla Nov 21, 2008 at 13:38:25 (UTC)
Goto Top
@64748
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 face-wink) - insofern wird es aber nicht so viel nützen, die Dateiliste vorweg zu erzeugen ...

Grüße
bastla
Mitglied: 64748
64748 Nov 21, 2008 at 13:57:28 (UTC)
Goto Top
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
Member: hajowe
hajowe Apr 02, 2009 at 17:26:37 (UTC)
Goto Top
schau dir mal das an. Vielleicht bringt es dich weiter
Programm
Member: noob-x
noob-x Aug 14, 2013 updated at 08:01:21 (UTC)
Goto Top
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

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:
@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
> 
Member: bastla
bastla Aug 14, 2013 at 07:32:48 (UTC)
Goto Top
Hallo noob-x!
muss da vielleicht anstatt dem dir in Zeile 5 was anderes oder zusätzlich rein.
Letzteres - da hatte ich leider geschlampt. face-sad
for /f "delims=" %%i in ('dir /b/a-d *.pdf') do call :ProcessFile "%%i"
Ich bessere das oben auch noch nach ...

Grüße
bastla
Member: noob-x
noob-x Aug 14, 2013 at 09:03:19 (UTC)
Goto Top
Hallo Bastla,

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
Member: bastla
bastla Aug 14, 2013 updated at 09:12:23 (UTC)
Goto Top
Hallo noob-x!

Mit "17,3" erhältst Du die Zeichen aus den Spalten 18 - 20 (die ersten 17 Zeichen werden übersprungen).

Grüße
bastla
Member: noob-x
noob-x Aug 14, 2013 at 11:25:42 (UTC)
Goto Top
Hallo,

hab ich gemacht, die Datei sollte lt Coordinaten DON.pdf heissen, rauskommen tut aber ì►Ì.pdf
woher kommt das ?

LG

Andy
Member: bastla
bastla Aug 14, 2013 at 11:30:01 (UTC)
Goto Top
Hallo noob-x!
woher kommt das ?
Na aus Deinem PDF - das lässt sich vermutlich nicht so gut als Text interpretieren ...

Grüße
bastla
Member: noob-x
noob-x Aug 14, 2013 at 11:43:35 (UTC)
Goto Top
nein, er text für den Dateinamen wird ja aus der Textdatei ausgelesen (oder irre ich da), die ich mit pfttotext.exe erstellt habe und welche im gleichen Verzeichnis mit gleichem Dateinamen.txt liegt, kann die .txt ganz normal mit Editor öffnen und der Text steht auch sauber drin.

???

LG

ANdy
Member: bastla
bastla Aug 14, 2013 updated at 11:54:08 (UTC)
Goto Top
Hallo noob-x!

Dann versuch es mit folgender Zeile 11:
for /f "tokens=1* delims=:" %%a in ('type %1^|findstr /n "^"^|findstr /b "11:"') do set "Zeile=%%b"
Grüße
bastla