Dateien Speicherort-Spezifisch umbenennen und Teilstrings darin ersetzen
Hallo Leute,
Nachdem ich nach 2 Stunden basteln und viel googlen mehrfach hier nützliche Informationen gefunden habe, aber mein "Projekt" nicht wirklich voranging, habe ich beschlossen euch mal um Hilfe zu fragen.
schonmal im Vorraus vielen Dank für eure Hilfe.
Zu meinem Problem (Betriebssystem ist Windows XP):
Erstmal abstrakt:
Ich habe einen Ordner in dem einige Dateien (hauptsächlich PDF's und die besagte BAT) liegen. Die PDF's sind nach Kürzeln benannt.
Die bat soll nun die PDF's (keine anderen Dateien) wie folgt umbenennen:
Zunächst soll soll der Name (nicht Pfad!) des Ordners in dem sie liegen an den Anfang ihres Dateinamens gesetzt werden und mit einem Unterstrich mit dem "Hauptnamen" verbunden werden. Dieser ist abhängig vom voherigen Namen (einem Kürzel) der PDF. Dieses Kürzel soll dann nach einer hardcoded-Liste ersetzt werden (falls keine Ersetzung für das Kürzel definiert wurde, soll dieses als "Hauptname" benutzt werden).
Zum Schluss soll die BAT sich selbst löschen (das hab ich bei meinen Versuchen immerhin hinbekommen :O )
An einem Beispiel erklärt:
Ich habe einen Ordner mit Namen "0-50_PS".
Darin sind folgende Dateien:
LKW.txt
LKW.pdf
PKW.pdf
BC.pdf
Moped.pdf
rename.bat
In rename.bat ist (hardgecoded, aber an einer zentralen Stelle änderbar) definiert:
LKW soll umbenannt werden in "Lastkraftwagen"
PWK soll umbenannt werden in "Personenkraftwagen"
BC soll umbenannt werden in "Boby Car"
DR soll umbenannt werden in "Dreirad"
Nach Ausführung von rename.bat soll der Inhalt so aussehen:
LKW.txt
0-50_PS_Lastkraftwagen.pdf
0-50_PS_Personenkraftwagen.pdf
0-50_PS_Boby Car.pdf [Ja, das Leerzeichen muss leider sein]
0-50_PS_Moped.pdf
Die TXT-Datei soll also noch genauso heißen, obwohl sie ein Kürzel enthält. Die PDF's sollen _alle_ den Ordnernamen am Anfang stehen haben und anschließend das (evtl. ersetzte) Kürzel.
Ich hoffe ich habe mich verständlich ausgedrückt.
Ich habe wirklich ewig rumprobiert, aber mit meinen (minimalen) Batch-Kenntnissen leider gescheitert. Wäre super wenn mir da jemand was schustern könnte. Falls das zuviel verlangt ist, kann ich morgen mal meinen (mehr als fragwürdigen) Code posten und meine Probleme aufzählen und nächste Woche hab ich das Ding dann auch fertig mit eurer Hilfe
Vielen Danke nochmal!
mit freundlichen Grüßen
Bene / Heinzel
Nachdem ich nach 2 Stunden basteln und viel googlen mehrfach hier nützliche Informationen gefunden habe, aber mein "Projekt" nicht wirklich voranging, habe ich beschlossen euch mal um Hilfe zu fragen.
schonmal im Vorraus vielen Dank für eure Hilfe.
Zu meinem Problem (Betriebssystem ist Windows XP):
Erstmal abstrakt:
Ich habe einen Ordner in dem einige Dateien (hauptsächlich PDF's und die besagte BAT) liegen. Die PDF's sind nach Kürzeln benannt.
Die bat soll nun die PDF's (keine anderen Dateien) wie folgt umbenennen:
Zunächst soll soll der Name (nicht Pfad!) des Ordners in dem sie liegen an den Anfang ihres Dateinamens gesetzt werden und mit einem Unterstrich mit dem "Hauptnamen" verbunden werden. Dieser ist abhängig vom voherigen Namen (einem Kürzel) der PDF. Dieses Kürzel soll dann nach einer hardcoded-Liste ersetzt werden (falls keine Ersetzung für das Kürzel definiert wurde, soll dieses als "Hauptname" benutzt werden).
Zum Schluss soll die BAT sich selbst löschen (das hab ich bei meinen Versuchen immerhin hinbekommen :O )
An einem Beispiel erklärt:
Ich habe einen Ordner mit Namen "0-50_PS".
Darin sind folgende Dateien:
LKW.txt
LKW.pdf
PKW.pdf
BC.pdf
Moped.pdf
rename.bat
In rename.bat ist (hardgecoded, aber an einer zentralen Stelle änderbar) definiert:
LKW soll umbenannt werden in "Lastkraftwagen"
PWK soll umbenannt werden in "Personenkraftwagen"
BC soll umbenannt werden in "Boby Car"
DR soll umbenannt werden in "Dreirad"
Nach Ausführung von rename.bat soll der Inhalt so aussehen:
LKW.txt
0-50_PS_Lastkraftwagen.pdf
0-50_PS_Personenkraftwagen.pdf
0-50_PS_Boby Car.pdf [Ja, das Leerzeichen muss leider sein]
0-50_PS_Moped.pdf
Die TXT-Datei soll also noch genauso heißen, obwohl sie ein Kürzel enthält. Die PDF's sollen _alle_ den Ordnernamen am Anfang stehen haben und anschließend das (evtl. ersetzte) Kürzel.
Ich hoffe ich habe mich verständlich ausgedrückt.
Ich habe wirklich ewig rumprobiert, aber mit meinen (minimalen) Batch-Kenntnissen leider gescheitert. Wäre super wenn mir da jemand was schustern könnte. Falls das zuviel verlangt ist, kann ich morgen mal meinen (mehr als fragwürdigen) Code posten und meine Probleme aufzählen und nächste Woche hab ich das Ding dann auch fertig mit eurer Hilfe
Vielen Danke nochmal!
mit freundlichen Grüßen
Bene / Heinzel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 170042
Url: https://administrator.de/contentid/170042
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
4 Kommentare
Neuester Kommentar
Aloha,
nun erstens möchte ich dich darauf hinweisen, Batchdateien nicht nach Befehlen zu benennen (rename.bat) ...
Zweitens möchte ich dich bitten, für meinen Lösungsvorschlag eine Liste.txt imselben Verzeichnis anzulegen, die dann so gegliedert ist:
Um dann die batch (die sich imselben Verzeichnis befindet) mit folgendem Code zu füllen:
Nun, dies ist abstrakt für deinen einen Ordner ausgelegt, ich befürchte zwar, dass du nachher ganze Verzeichnisstrukturen damit abarbeiten willst aber schauen wir mal, ob dem wirklich so ist ^_^
Das
greetz André
nun erstens möchte ich dich darauf hinweisen, Batchdateien nicht nach Befehlen zu benennen (rename.bat) ...
Zweitens möchte ich dich bitten, für meinen Lösungsvorschlag eine Liste.txt imselben Verzeichnis anzulegen, die dann so gegliedert ist:
LKW=Lastkraftwagen
PKW=Personenkraftwagen
BC=Bobby Car
DR=Dreirad
Moped=Moped
@echo off
for %%* in (.) do set "Verzeichnis=%%~n*"
for /f "delims=" %%s in ('dir /b /a-d *.pdf') do (
for /f "usebackq delims== tokens=1,2" %%m in ("Liste.txt") do (
if "%%~ns"=="%%m" echo ren "%%s" "%Verzeichnis%_%%n%%~xs"
)
)
pause
goto :eof
Nun, dies ist abstrakt für deinen einen Ordner ausgelegt, ich befürchte zwar, dass du nachher ganze Verzeichnisstrukturen damit abarbeiten willst aber schauen wir mal, ob dem wirklich so ist ^_^
Das
echo
in Zeile 5 dient erst einmal zum look-what-you-see, wenn du es entfernst, wird gearbeitet.greetz André
Hallo Heinzel,
und hier noch eine Version, bei der Du ohne externe Datei auskommst:
Die Begriffe und ihre Ersetzungen werden in den Zeilen 6 und 7 eingetragen. Die Reihenfolge muss in den beiden Zeilen korrespondieren. Wenn Leerzeichen vorkommen sollten, muss der Begriff, wie hier im Beispiel
Gruß
Friemler
und hier noch eine Version, bei der Du ohne externe Datei auskommst:
@echo off
setlocal enabledelayedexpansion
set "Expressions=LKW PKW BC DR"
set "ReplaceExp=Lastkraftwagen Personenkraftwagen "Bobby Car" Dreirad"
for %%d in (.) do set "HomeDir=%%~nd"
for /f "delims=" %%f in ('dir /b /a:-d *.pdf') do (
set /a Cntr=0
set "Exp=%%~nf"
for %%e in (%Expressions%) do (
set /a Cntr+=1
if "%%~nf" equ "%%~e" (
set /a Cntr2=0
for %%r in (%ReplaceExp%) do (
set /a Cntr2+=1
if !Cntr2! equ !Cntr! (
set "Exp=%%~r"
)
)
)
)
ren "%%f" "%HomeDir%_!Exp!%%~xf"
)
Die Begriffe und ihre Ersetzungen werden in den Zeilen 6 und 7 eingetragen. Die Reihenfolge muss in den beiden Zeilen korrespondieren. Wenn Leerzeichen vorkommen sollten, muss der Begriff, wie hier im Beispiel
Bobby Car
, in Anführungszeichen eingeschlossen werden.Gruß
Friemler
Zitat von @Heinzel:
Im Prinzip find ich das Prinzip mit der externen Datei gar nicht schlecht, allerdings werden bei dirm (Skyemugen) ateien, die nicht in der Liste sind, nicht umbenannt.
Im Prinzip find ich das Prinzip mit der externen Datei gar nicht schlecht, allerdings werden bei dirm (Skyemugen) ateien, die nicht in der Liste sind, nicht umbenannt.
Aloha,
I know, I know, ich hatte wieder nur halb gelesen und mir fiel später auf, dass es ja noch PDFs gibt, die keine Kürzel haben, also habe ich einfach das Moped=Moped dazugemogelt, dachte mir: Ah, wenn er schon eine Liste anlegen muss, macht das auch nichts mehr aus *fg*. Abends im Urlaub darf man dann auch noch einmal faul sein ^_^ und da Friemler dann kurz darauf eh etwas passenderes postete, hab ich mir die Überarbeitung dann auch gespart
greetz André
P.S.: Ich hoffe, man hat nicht irgendwann 50 Ersetzungen, wird das eine nette Variable *gg*