Files umbenennen anhand Liste in txt File
Habe leider im Forum nichts passendes gefunden. Es hat zwar viele ähnliche Themen, aber diese weichen doch zusehr von dem von mir gesuchten ab.
Folgendes Problem stellt sich mir:
Ich habe ein Folder in dem hunderte pdf Files liegen.
Die Namen dieser Files habe ich in ein .txt File geladen (RESULT.txt).
Nun wird das File mittels Excel um eine Spalte erweitert, in der der neue Filename steht.
Das Ziel dieses Batches ist es, Dateinamen umzubenennen, aber auf eine etwas, sagen wir einmal speziellere Art und Weise.
Das File sieht nun so aus:
OldFilename1.pdf;NewFilename.pdf
OldFilename2.pdf;NewFilename.pdf
OldFilename3.pdf;NewFilename.pdf
u.s.w.
Wie bekomme ich das hin, dass der Batch nun anhand der Liste das entsprechende (Old...) File sucht und dies mit neuem Namen (New...) in ein Folder namens "Output" ablegt?
Hat mir jemand einen Tip, ein paar Snippets oder vielleicht gar ein fast pfannenfertiges Script? Das wäre echt toll!
Besten Dank und Gruss!
Folgendes Problem stellt sich mir:
Ich habe ein Folder in dem hunderte pdf Files liegen.
Die Namen dieser Files habe ich in ein .txt File geladen (RESULT.txt).
Nun wird das File mittels Excel um eine Spalte erweitert, in der der neue Filename steht.
Das Ziel dieses Batches ist es, Dateinamen umzubenennen, aber auf eine etwas, sagen wir einmal speziellere Art und Weise.
Das File sieht nun so aus:
OldFilename1.pdf;NewFilename.pdf
OldFilename2.pdf;NewFilename.pdf
OldFilename3.pdf;NewFilename.pdf
u.s.w.
Wie bekomme ich das hin, dass der Batch nun anhand der Liste das entsprechende (Old...) File sucht und dies mit neuem Namen (New...) in ein Folder namens "Output" ablegt?
Hat mir jemand einen Tip, ein paar Snippets oder vielleicht gar ein fast pfannenfertiges Script? Das wäre echt toll!
Besten Dank und Gruss!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 91961
Url: https://administrator.de/contentid/91961
Ausgedruckt am: 15.11.2024 um 23:11 Uhr
13 Kommentare
Neuester Kommentar
Moin solaris-ch,
nun hab ich mich so gefreut, dass endlich mal eine/r das Wort "umbenennen" richtig schreibt.... und dann buchstabierst Du das Wort davor völlig falsch.
Egal, mein CMD-Line-halbzeile zum "vieles Umbenennen" wäre:
nun hab ich mich so gefreut, dass endlich mal eine/r das Wort "umbenennen" richtig schreibt.... und dann buchstabierst Du das Wort davor völlig falsch.
Egal, mein CMD-Line-halbzeile zum "vieles Umbenennen" wäre:
>For /f "delims=; tokens=1,2" %i in (%temp%\tmp2.txt) do @echo move /y "%i" ".\Output\%j"
move /y "OldFilename1.pdf" ".\Output\NewFilenameA.pdf"
move /y "OldFilename2.pdf" ".\Output\NewFilenameB.pdf"
move /y "OldFilename3.pdf" ".\Output\NewFilenameC.pdf"
...als Beispiel.
* Der Pfad ("\.Output") muss erstens angepasst und zweitens vorher angelegt werden
* Deine Input-Datei heißt ebenfalls bestimmt anders
* das "@echo" ist nur zum Demonstrieren
* Als Batch (aber wozu?) müssen alle %-Zeichen verdoppelt werden. Im Gegenzug ist im Batch der Schalter /y gratis mit dabei - braucht nicht eingegeben werden.
Gruß
Biber
Moin solaris-ch,
Also... in langsam für Gelegenheitsbätcher.
NUR die Zeile 1 per Copy + paste am CMD-ausprobieren (abfeuern).
Allerdings mit Deiner Umbenams-Datei in der Klammer.
Dort wo jetzt (%temp%\tmp2.txt) steht.
Dann gucken. Und weiter.
Grüße
Biber
aber ich schnall das nicht
Sag ich doch...Du musst noch Files lernen... Also... in langsam für Gelegenheitsbätcher.
NUR die Zeile 1 per Copy + paste am CMD-ausprobieren (abfeuern).
Allerdings mit Deiner Umbenams-Datei in der Klammer.
Dort wo jetzt (%temp%\tmp2.txt) steht.
Dann gucken. Und weiter.
Grüße
Biber
Moin solarias-ch,
lass uns gaanz ruhig bleiben... *noch einen Gang runterschalt*
Also:
1) einen CMD-Prompt öffnen zum Testen
->Start->Ausführen->cmd eintippen->ENTER
2) die FOR-Zeile von Oben kopieren.
3) Das ist Test. Simulation. Proof-of-concept.... aber kein Batch.
wenn es denn am Prompt sinnvoll funktioniert:
3a) Diese Zeile ohne das "@echo" nachmal abfeuern.... das wird wirklich geMOVED.
3b) eigentlich sollte damit der Drops gelutscht sein - aber wenn Du die Zeile noch als Batch (Textdatei mit der Endung .cmd oder .bat) aufbewahren willst:
Grüße
Biber
lass uns gaanz ruhig bleiben... *noch einen Gang runterschalt*
Also:
1) einen CMD-Prompt öffnen zum Testen
->Start->Ausführen->cmd eintippen->ENTER
2) die FOR-Zeile von Oben kopieren.
3) Das ist Test. Simulation. Proof-of-concept.... aber kein Batch.
wenn es denn am Prompt sinnvoll funktioniert:
3a) Diese Zeile ohne das "@echo" nachmal abfeuern.... das wird wirklich geMOVED.
3b) eigentlich sollte damit der Drops gelutscht sein - aber wenn Du die Zeile noch als Batch (Textdatei mit der Endung .cmd oder .bat) aufbewahren willst:
::Inhalt von MovePDFsIntoOrdner.cmd
@FOR /f "delims=; tokens=1,2" %%i in (%temp%\RESULT.txt) do @(
@echomove "%%i" ".\Output\%j"
)
Set /P "dauquery=Soll ich das wirklich tun? J/N"
IF /i "%dauquery%" NEQ "J" goto :Feichlink
@FOR /f "delims=; tokens=1,2" %%i in (%temp%\RESULT.txt) do @(
move "%%i" ".\Output\%j"
)
:Feichlink
pause
Grüße
Biber
Moin solaris-ch,
wir bekommen das schon zum Fliegen...
Um die Datei "result.txt" zu finden hast Du mehrere Möglichkeiten:
Über das Ski-urlaubsangebot freue ich mich sehr.
...obwohl Biber auf der Loipe bestimmt schnell auffallen...
Grüße
Biber
wir bekommen das schon zum Fliegen...
Um die Datei "result.txt" zu finden hast Du mehrere Möglichkeiten:
- entweder die steht "immer" in einem bestimmten Pfad wie d:\input oder y:\meineSachen --> dann fest eingeben
- oder die steht "immer" dort, wo auch die batchdatei liegt (meinetwegen auch mit auf dem USB-Stick oder einer CD, wenn die Batch halt dort ist.
::... irgendwo in einem unschuldigen Batch...
....
:: wenn die result.txt IMMER dort ist, wo die Batch-Datei liegt:
FOR /f "delims=; tokens=1,2" %%i in (%~dp0\RESULT.txt) do bla
....
Über das Ski-urlaubsangebot freue ich mich sehr.
...obwohl Biber auf der Loipe bestimmt schnell auffallen...
Grüße
Biber
Moin solaris-ch,
bitte spiele folgendes Beispiel am CMD-Prompt nach:
[ mein Prompt ist dargestellt durch ">"]
Erläuterung:
---> D.H. eigentlich soll der NeueName mit einem Leerzeichen beginnen, wird hier verlangt.
---> Vorsicht: Damit kommen einige M$-Routinen klar und werfen stillschweigend das leading blank weg. Andere Routinen sind ein bisschenblöde suboptimal und versuchen in der Tat, den Dateinamen mit einem Leerzeichen beginnen zu lassen.
Um dort Konflikte zu vermeiden, bitte darauf achten, dass in der Input.txt-Datei keine Leerzeichen NACH Semikolon VOR NeuemNamen stehen.
Im Batch wieder alle %-Zeichen verdoppeln.
Grüße
Biber
bitte spiele folgendes Beispiel am CMD-Prompt nach:
[ mein Prompt ist dargestellt durch ">"]
>type input.txt
OldFilename1.pdf;NewFilename.pdf
"Old Filename2.pdf";"New Filename B.pdf"
Old Filename 3.pdf; New Filename C.pdf
>@FOR /f "delims=; tokens=1,2*" %i in (INput.txt) do @@echo copy "Input\%~i" "Output\%~j"
copy "Input\OldFilename1.pdf" "Output\NewFilename.pdf"
copy "Input\Old Filename2.pdf" "Output\New Filename B.pdf"
copy "Input\Old Filename 3.pdf" "Output\ New Filename C.pdf"
Erläuterung:
- In der 3-Zeilen-Datei Input.txt sind jetziger/neuer Dateiname durch ";" getrennt.
- Zeile 1 - "normale" Dateinamen ohne Leerzeichen
- Zeile 2 und 3 - mit "Leerzeichen im Namen" - mal mit, mal ohne Anführungszeichen.
- Die angepasste FOR-Anweisung verarbeitet es richtig
- ABER: Falls in der Datei NACH dem Semikolon und VOR dem NeuenNamen ein/mehrere Leerzeichen sind, kommt (siehe dritte FOR-Ergebniszeile) heraus:
copy "Input\Old Filename 3.pdf" "Output\ New Filename C.pdf"
---> D.H. eigentlich soll der NeueName mit einem Leerzeichen beginnen, wird hier verlangt.
---> Vorsicht: Damit kommen einige M$-Routinen klar und werfen stillschweigend das leading blank weg. Andere Routinen sind ein bisschen
Um dort Konflikte zu vermeiden, bitte darauf achten, dass in der Input.txt-Datei keine Leerzeichen NACH Semikolon VOR NeuemNamen stehen.
Im Batch wieder alle %-Zeichen verdoppeln.
Grüße
Biber