pdf-dateien mittels einer txt-datei und batch-dateien umbenennen
hallo, ich habe das problem, dass ich eine textdatei, bericht.txt, habe, und etwas über 50000 pdf dateien.
nun will ich es so, dass diese pdf dateien, 78381_Seite_1.PDF als beispiel, umbenannt werden sollen in: 69894_Seite_2.PDF
ein test inhalt der bericht.txt:
Bestell-Nr. Beschreibung Erstell-Datum Land Dokumentenstatus Information Dokument-ID Ersteller Eintrag vom Änderung durch Letzte Änderungen Letzter Zugriff Letzter Zugriff am Seiten Verknüpfte Dokumente
P16841 Microfinance for the Poorest 08.03.2007 Pakistan Neu Dokument P16841 : Pakistan - Microfinance for the Poorest 89358 Frau Bolduan 09.03.2007 14:53:15 Systemverwalter_1 09.03.2007 14:53:18 Frau Bolduan 09.03.2007 15:02:15
in den dateinamen sind die 5 zahlen vorne variabel, sowie die seitenzahl hinter seite_x ebenfalls. in der datei bericht.txt sind alle daten, die benötigt werden zum umbenennen, enthalten. die dokument-id "89358" soll zum beispiel durch die bestellnummer "P168412" ersetzt werden. also muss die dokument-id in der datei gesucht werden, dazu die passende datei ebenfalls, und dann muss die dokument-id vorne durch die bestellnummer ersetzt werden.
ich hoffe das ist jetzt verständlich, wenn nicht tut es mir leid, aber besser kann ich es nicht erklären.
nun will ich es so, dass diese pdf dateien, 78381_Seite_1.PDF als beispiel, umbenannt werden sollen in: 69894_Seite_2.PDF
ein test inhalt der bericht.txt:
Bestell-Nr. Beschreibung Erstell-Datum Land Dokumentenstatus Information Dokument-ID Ersteller Eintrag vom Änderung durch Letzte Änderungen Letzter Zugriff Letzter Zugriff am Seiten Verknüpfte Dokumente
P16841 Microfinance for the Poorest 08.03.2007 Pakistan Neu Dokument P16841 : Pakistan - Microfinance for the Poorest 89358 Frau Bolduan 09.03.2007 14:53:15 Systemverwalter_1 09.03.2007 14:53:18 Frau Bolduan 09.03.2007 15:02:15
in den dateinamen sind die 5 zahlen vorne variabel, sowie die seitenzahl hinter seite_x ebenfalls. in der datei bericht.txt sind alle daten, die benötigt werden zum umbenennen, enthalten. die dokument-id "89358" soll zum beispiel durch die bestellnummer "P168412" ersetzt werden. also muss die dokument-id in der datei gesucht werden, dazu die passende datei ebenfalls, und dann muss die dokument-id vorne durch die bestellnummer ersetzt werden.
ich hoffe das ist jetzt verständlich, wenn nicht tut es mir leid, aber besser kann ich es nicht erklären.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 54166
Url: https://administrator.de/contentid/54166
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
15 Kommentare
Neuester Kommentar
Moin eeleater,
willkommen im Forum.
Das sind zu unzureichende Informationen für mich.
Insbesondere Deine Phantasien mit
In dem geposteten Gesamtabzug ist zwar irgendwo eine Spalte "Seiten" angegeben, aber erstens ist die leer und zweitens sieht die für mich eher nach einer Gesamtseitenzahl aus.
Wenn ich die beiden Beispielsätze mit einem FOR /F-Einzeiler auslesen würde, käme heraus:
...d.h. Bestell-Nummer und Dokumenten-ID würden gefunden werden, aber bei "Seiten" steht nix.
Welche Datei(en) sollten jetzt a) gesucht werden b) in was umbenannt werden?
Bitte doch bitte den offensichtlich stinkefaulen Erzeuger dieses Gesamt-Berichts mal darum, Dir eine Liste zu exportieren mit den 2 (3? 4?) Feldern, die Du wirklich brauchst ("alte" Dokumenten-ID; "neue" Bestellnummer; Seitenangabe (alt) falls relevant; Seitenangabe (neu) falls Relevant).
Und das Ganze mit ";" getrennt statt mit TABs.
Und von Dir fehlt noch die Information, ob Du
- eine Log-Datei brauchst für alle umbenannten (alterName, neuerName) und/oder
- eine separate Logdatei für alle nicht gefundenen und
- ob denn Kollisionen zu erwarten sind (der "neue" Zielname tritt mehrfach auf) und wie damit umzugehen ist.
Gruss
Biber
willkommen im Forum.
Das sind zu unzureichende Informationen für mich.
Insbesondere Deine Phantasien mit
...78381_Seite_1.PDF als beispiel, umbenannt werden sollen in: 69894_Seite_2.PDF...
sind mir nicht nachvollziehbar.In dem geposteten Gesamtabzug ist zwar irgendwo eine Spalte "Seiten" angegeben, aber erstens ist die leer und zweitens sieht die für mich eher nach einer Gesamtseitenzahl aus.
Wenn ich die beiden Beispielsätze mit einem FOR /F-Einzeiler auslesen würde, käme heraus:
>aallutscher.bat
[BestellNr: Bestell-Nr.] [DokID: Dokument-ID] [Seiten: Seiten]
[BestellNr: P16841] [DokID: 89358] [Seiten: ]
Welche Datei(en) sollten jetzt a) gesucht werden b) in was umbenannt werden?
Bitte doch bitte den offensichtlich stinkefaulen Erzeuger dieses Gesamt-Berichts mal darum, Dir eine Liste zu exportieren mit den 2 (3? 4?) Feldern, die Du wirklich brauchst ("alte" Dokumenten-ID; "neue" Bestellnummer; Seitenangabe (alt) falls relevant; Seitenangabe (neu) falls Relevant).
Und das Ganze mit ";" getrennt statt mit TABs.
Und von Dir fehlt noch die Information, ob Du
- eine Log-Datei brauchst für alle umbenannten (alterName, neuerName) und/oder
- eine separate Logdatei für alle nicht gefundenen und
- ob denn Kollisionen zu erwarten sind (der "neue" Zielname tritt mehrfach auf) und wie damit umzugehen ist.
Gruss
Biber
Hallo,
für jemand der neben Dir steht/sitzt ist Deine Erluterung möglicherweise einleuchtend, aus der Ferne aber kann man damit nicht viel anfangen.
Du hast also eine Text-Datei "bericht.txt", OK.
In dieser stehen am Anfang jeder Zeile die Bestell-Nr. Und in der Mitte der Zeile steht die Document-ID. Die Document-ID soll nun durch die Bestell-Nr. ersetzt werden, auch OK.
Hat die Bestell-Nr. eine feste Länge? Wenn nein, ist sie von den nächsten Angaben in dieser Zeile durch ein Leerzeichen getrennt??
Welches Kriterium gilt für die Seiten-Nr.. Steht die neue Nr. auch irgendwo in der Zeile in bericht.txt oder soll hier fortlaufend nummeriert werden oder welche Vorstellungen hast Du hier??
Liegen die PDF-Dateien alle im gleichen Verzeichnis oder in Unterordner des gleichen Hauptverzeichnisses??
Mit den notwendigen Informationen ist das sicher machbar; in Deinem Fall würde ich aber vorschlagen, das mit einem VBS-Script durchzuführen. Ist schneller und die meisten Befehle die Du dazu benötigst, sind schon fest vorgegeben.
MfG maneich
für jemand der neben Dir steht/sitzt ist Deine Erluterung möglicherweise einleuchtend, aus der Ferne aber kann man damit nicht viel anfangen.
Du hast also eine Text-Datei "bericht.txt", OK.
In dieser stehen am Anfang jeder Zeile die Bestell-Nr. Und in der Mitte der Zeile steht die Document-ID. Die Document-ID soll nun durch die Bestell-Nr. ersetzt werden, auch OK.
Hat die Bestell-Nr. eine feste Länge? Wenn nein, ist sie von den nächsten Angaben in dieser Zeile durch ein Leerzeichen getrennt??
Welches Kriterium gilt für die Seiten-Nr.. Steht die neue Nr. auch irgendwo in der Zeile in bericht.txt oder soll hier fortlaufend nummeriert werden oder welche Vorstellungen hast Du hier??
Liegen die PDF-Dateien alle im gleichen Verzeichnis oder in Unterordner des gleichen Hauptverzeichnisses??
Mit den notwendigen Informationen ist das sicher machbar; in Deinem Fall würde ich aber vorschlagen, das mit einem VBS-Script durchzuführen. Ist schneller und die meisten Befehle die Du dazu benötigst, sind schon fest vorgegeben.
MfG maneich
Na gut, eeleater,
dann wäre das Batch-Grundgerüst (ausnahmsweise in epischer Breite langgezogen) so:
Das fette ECHO muss nach dem Testen und Anpassen raus.
Und der Name der %logdatei% am Anfang geändert werden.
Der Mini-Batch geht davon aus, dass er in dem Verzeichnis gestartet wird, wo sich auch bestell.txt und *.pdfs befinden.
Gruss
Biber
P.S. Wären Semicola und nicht diese albernen TABSTOPPs als Delimiter verwendet worden, hätte es auch ein Oneliner vom CMD-Prompt getan. Selbst verursachte Leiden...
P.P.S. Hab ich bemerkt, dass Du auf meine Bitte nach einer sinnvoll erzeugten "Bericht.txt" nicht reagiert hast
dann wäre das Batch-Grundgerüst (ausnahmsweise in epischer Breite langgezogen) so:
::---------snipp aaliBaba.bat
@echo off & setlocal enabledelayedExpansion
Set "logdatei=con:"
REM Hier steht nach dem "delims= eine TAB-Taste als Trennzeichen !!!
@for /f "skip=1 tokens=1,7,14 delims= " %%i in (bestell.txt) do call :renameAll %%j %%i %%k
goto :eof
:renameAll
@echo [oldDokID:%1] [newBestellNr: %2] [Seiten:%3]
for %%i in (%1*.pdf) do call :renameOne %%i %1 %2 %3
GOTO :eof
:renameOne
REM Parameter1=die gefundene PDF-Datei; Param2=alterNamensTeil Param3=neuer NamensTeil
REM Param4 (unused) ist diese Seitenangabe..falls irgendwann sinnvoll
Set theFoundPdf=%1
Set thenewName=!theFoundPdf:%2=%3!
<b>ECHO </b>rename %theFoundPdf% %theNewName%
if not errorlevel 1 echo Renamed: %theFoundPdf% to %theNewName% >>%logdatei%
goto :eof
Das fette ECHO muss nach dem Testen und Anpassen raus.
Und der Name der %logdatei% am Anfang geändert werden.
Der Mini-Batch geht davon aus, dass er in dem Verzeichnis gestartet wird, wo sich auch bestell.txt und *.pdfs befinden.
Gruss
Biber
P.S. Wären Semicola und nicht diese albernen TABSTOPPs als Delimiter verwendet worden, hätte es auch ein Oneliner vom CMD-Prompt getan. Selbst verursachte Leiden...
P.P.S. Hab ich bemerkt, dass Du auf meine Bitte nach einer sinnvoll erzeugten "Bericht.txt" nicht reagiert hast
Na, hast Du ein Glück...
Dann kannst Du den Batch ja noch ein bisschen eindampfen:
Gruss
Biber
Dann kannst Du den Batch ja noch ein bisschen eindampfen:
::---------snipp aaliBaba.bat
@echo off & setlocal
Set "logdatei=con:"
REM Hier steht nach dem "delims= eine TAB-Taste als Trennzeichen !!!
@for /f "skip=1 tokens=1,7 delims= " %%i in (bestell.txt) do (
If exist %%j*.pdf rename %%j*.pdf %%i.pdf && echo Renamed: %%j*.pdf to %%i.pdf >>%logdatei%
)
Gruss
Biber
Hallo
probiere es mal mit diesem Script. Notepad örffnen, hineinkopieren, Name vergeben mit der Endung .vbs.
Es ist wichtig, daß außer den PDF-Dateien keine anderen Dateitypen z.B. die bericht.txt oder rename.log (wird hier verwendet um die umbenannten Dateien aufzulisten) in diesem Verzeichnis abgelegt sind.
Script.Name = ren_dat_fo.vbs
ab hier kopieren
'bericht.txt und rename.log dürfen nicht im Ordner der PDF-Dateien liegen
Set fs = CreateObject("Scripting.FileSystemObject")
p_1 = "Verzeichnispfad" 'Hier den echte Pfad des PDF-Ordners rein
Set f1 = fs.GetFolder(p_1)
Set fn = fs.OpenTextFile("Verzeichnispfad\rename.log", 2, True) 'Hier Pfad wo rename.log abgelegt werden soll
fn.WriteLine "Liste der umbenannten Pdf-Dateien 1. neuer Name / 2. alter Name"
fn.WriteBlankLines(1)
ren_pdf anz_fils
WScript.Echo "Das Script ist beendet!!" & vbLf & "soweit alle PDF-Dateien in bericht.txt erfaßt sind" & vbLf & "sind auch alle Dateien unbenannt"
WScript.Quit
Sub ren_pdf(anz)
Dim j,f_na,dat,a_n
For Each file in f1.Files
f_na = left(file.Name, 6)
Set f = fs.OpenTextFile("Verzeichnispfad\bericht.txt", 1) 'hier den Pfad der bericht.txt eintragen
do
dat = f.ReadLine
If 0 < InStr(dat, f_na) Then
a_n = file.Name : Set datei = file
datei.Name = left(dat, 6)&".pdf"
fn.WriteLine datei.Name & " " & a_n
f.Close
Exit do
End If
Loop Until f.AtEndOfStream
j = j + 1
If j = anz Then
Exit For
End If
Next
End Sub
Function anz_fils
Dim i,dat
i = 0
For Each file in f1.Files
:i = i+1
Next
anz_fils = i : i = ""
End Function
bis hier
MfG maneich
probiere es mal mit diesem Script. Notepad örffnen, hineinkopieren, Name vergeben mit der Endung .vbs.
Es ist wichtig, daß außer den PDF-Dateien keine anderen Dateitypen z.B. die bericht.txt oder rename.log (wird hier verwendet um die umbenannten Dateien aufzulisten) in diesem Verzeichnis abgelegt sind.
Script.Name = ren_dat_fo.vbs
ab hier kopieren
'bericht.txt und rename.log dürfen nicht im Ordner der PDF-Dateien liegen
Set fs = CreateObject("Scripting.FileSystemObject")
p_1 = "Verzeichnispfad" 'Hier den echte Pfad des PDF-Ordners rein
Set f1 = fs.GetFolder(p_1)
Set fn = fs.OpenTextFile("Verzeichnispfad\rename.log", 2, True) 'Hier Pfad wo rename.log abgelegt werden soll
fn.WriteLine "Liste der umbenannten Pdf-Dateien 1. neuer Name / 2. alter Name"
fn.WriteBlankLines(1)
ren_pdf anz_fils
WScript.Echo "Das Script ist beendet!!" & vbLf & "soweit alle PDF-Dateien in bericht.txt erfaßt sind" & vbLf & "sind auch alle Dateien unbenannt"
WScript.Quit
Sub ren_pdf(anz)
Dim j,f_na,dat,a_n
For Each file in f1.Files
f_na = left(file.Name, 6)
Set f = fs.OpenTextFile("Verzeichnispfad\bericht.txt", 1) 'hier den Pfad der bericht.txt eintragen
do
dat = f.ReadLine
If 0 < InStr(dat, f_na) Then
a_n = file.Name : Set datei = file
datei.Name = left(dat, 6)&".pdf"
fn.WriteLine datei.Name & " " & a_n
f.Close
Exit do
End If
Loop Until f.AtEndOfStream
j = j + 1
If j = anz Then
Exit For
End If
Next
End Sub
Function anz_fils
Dim i,dat
i = 0
For Each file in f1.Files
:i = i+1
Next
anz_fils = i : i = ""
End Function
bis hier
MfG maneich