Dateinamen-String vor und nach einem bestimmten Zeichen Tauschen
Hallo, ich würde mich über jede Hilfe freuen, da es eine sehr nervenaufreibende Arbeit wäre alles von Hand zu machen, darum wende ich mich an diese Community ...
Hallo,
Ich möchte gern einen Dateinamen auslesen, und Wörter (String) vor einem Zeichen z.B. "-" oder "_" und einen String nach diesem Zeichen tauschen.
Hier ein Beispiel:
Hallo Welt - Hersteller Gott.txt
nach der Konvertierung soll die Datei inhaltlich unverändert bleiben und heissen:
Hersteller Gott - Hallo Welt.txt
(die Zeichenlänge vor und nach dem "-" ist variabel und Alphanummerisch)
das müsste ich weiß nicht wie oft ... also soviele male wie Dateien sich in dem Ordner befinden durchgeführt werden ... auch ordnerunabhängig.
Es spielt auch keine Rolle welches Suffix hinter dem . steht (.txt oder .php ... etc.)
Vieleicht kennt jemand ein Tool oder eine Batch die mir hierbei helfen könnte ?
Ich währe sehr dankbar !!!
PS: ich hab schon einige Tools ausprobiert und alle bieten ein verschieben an jedoch nicht mit Bedingung vor oder nach einem Zeichen als austausch des String :o(
Hallo,
Ich möchte gern einen Dateinamen auslesen, und Wörter (String) vor einem Zeichen z.B. "-" oder "_" und einen String nach diesem Zeichen tauschen.
Hier ein Beispiel:
Hallo Welt - Hersteller Gott.txt
nach der Konvertierung soll die Datei inhaltlich unverändert bleiben und heissen:
Hersteller Gott - Hallo Welt.txt
(die Zeichenlänge vor und nach dem "-" ist variabel und Alphanummerisch)
das müsste ich weiß nicht wie oft ... also soviele male wie Dateien sich in dem Ordner befinden durchgeführt werden ... auch ordnerunabhängig.
Es spielt auch keine Rolle welches Suffix hinter dem . steht (.txt oder .php ... etc.)
Vieleicht kennt jemand ein Tool oder eine Batch die mir hierbei helfen könnte ?
Ich währe sehr dankbar !!!
PS: ich hab schon einige Tools ausprobiert und alle bieten ein verschieben an jedoch nicht mit Bedingung vor oder nach einem Zeichen als austausch des String :o(
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121440
Url: https://administrator.de/contentid/121440
Ausgedruckt am: 17.11.2024 um 13:11 Uhr
23 Kommentare
Neuester Kommentar
Das sollte relativeinfach in einer FOR -Schleife zu verwirklichen sein, in der man zB. "-" als Delimiter setzt. Interessant in diesem Fall wäre aber noch eins: So ie du es gepostet hast, befindet sich vor und hinter dem Bindestrich ein Leerzeichen. Ist das in der Realität auch so und soll es in den umgewandelten Namen wieder so sein?
Hallo Flaschback und willkommen im Forum!
Lt Deinem Beispiel wären auch noch Leerzeichen vor und nach dem Trennzeichen ...
Falls dem nicht so wäre, müsste etwa folgender Batch genügen:
Das "echo" vor dem "ren" sorgt dafür, dass (zum Testen) das Umbenennen nur angezeigt, aber noch nicht durchgeführt wird.
Grüße
bastla
[Edit] Ich war auch schon mal schneller ... [/Edit]
Lt Deinem Beispiel wären auch noch Leerzeichen vor und nach dem Trennzeichen ...
Falls dem nicht so wäre, müsste etwa folgender Batch genügen:
@echo off & setlocal
set "Ordner=D:\Test"
set "Typ=txt"
for %%i in ("%Ordner%\*.%Typ%") do for /f "tokens=1,2 delims=-" %%a in ("%%~ni") do echo ren "%%i" "%%b-%%a%%~xi"
Grüße
bastla
[Edit] Ich war auch schon mal schneller ... [/Edit]
Hallo Flaschback!
In dieser Version wird am "-" geteilt, und alle unmittelbar davor bzw danach befindlichen Leerzeichen (auch mehrere) werden eliminiert. Am Ende wird wieder mit je einem Leerzeichen vor und nach dem "-" zusammengesetzt.
Grüße
bastla
[Edit]
Geändert wird auch in dieser Version nichts an den Dateinamen, solange vor dem "ren" das "echo" steht - wenn Du es entfernst, wird tatsächlich umbenannt (und dann ist auch "pause" nicht mehr nötig)
[/Edit]
[Edit2] Noch ein paar unnötige "echo"-Zeilen entfernt [/Edit2]
macht das die Sache komplizierter ?
Nicht wirklich @echo off & setlocal
set "Ordner=D:\Test"
set "Typ=txt"
for %%i in ("%Ordner%\*.%Typ%") do for /f "tokens=1,2 delims=-" %%a in ("%%~ni") do set "Teil1=%%b" & set "Teil2=%%a" & call :ProcessFile "%%~fi"
pause
goto :eof
:ProcessFile
:Loop1
if "%Teil1:~,1%"==" " (set "Teil1=%Teil1:~1%" & goto :Loop1)
:Loop2
if "%Teil2:~-1,1%"==" " (set "Teil2=%Teil2:~,-1%" & goto :Loop2)
echo ren %1 "%Teil1% - %Teil2%%~x1"
goto :eof
Grüße
bastla
[Edit]
Habe nun die test.bat mal ausprobiert, jedoch wurde nichts getausch :o( ... auch wurde mein cmd fenster gleich wieder geschlossen ... hmm, mache ich hier auch etwas falsch ?
Beim Testen von Batches solltest Du das CMD-Fenster bereits vorher öffnen und von der Kommandozeile aus starten oder zumindest den Befehl "pause" an das Ende des Batches stellen - mache ich in der neuen Version ...Geändert wird auch in dieser Version nichts an den Dateinamen, solange vor dem "ren" das "echo" steht - wenn Du es entfernst, wird tatsächlich umbenannt (und dann ist auch "pause" nicht mehr nötig)
[/Edit]
[Edit2] Noch ein paar unnötige "echo"-Zeilen entfernt [/Edit2]
Hallo Flaschback,
hier für Batch ungetestet im Ordner
viel zu spät und vllt gehts gar net.....naja
hier für Batch ungetestet im Ordner
set pfad=D:\test\
for /f "tokens=1-3 delims=-_." %%b in ('dir "%pfad%" /a-d /b ') do if exist "%pfad%%%b-%%c.%%d" (ren "%pfad%%%b-%%c.%%d" "%%c-%%b.%%d") else if exist "%pfad%%%b_%%c.%%d" ren "%pfad%%%b_%%c.%%d" "%%c_%%b.%%d"
viel zu spät und vllt gehts gar net.....naja
Hallo Flaschback!
Ansonsten noch ein Hinweis: Das Umbenennen erfolgt (derzeit) nur, wenn es noch keine gleichnamige Datei gibt - was sollte denn im Fall des Falles dann passieren?
Grüße
bastla
aber er speichert die Datei nicht wieder im Testordner ...
... nachdem Du das "echo" in Zeile 16 (habe oben noch einige Zeilen herausgenommen) entfernt hast?Ansonsten noch ein Hinweis: Das Umbenennen erfolgt (derzeit) nur, wenn es noch keine gleichnamige Datei gibt - was sollte denn im Fall des Falles dann passieren?
Grüße
bastla
@rubberman
Die Zeile 5 sollte dann so aussehen:
Grüße
bastla
Vermute, die umbenannte Datei wird gleich wieder gefunden, und erneut umbenannt.
Ist zwar bei meinen Tests nicht passiert, möchte ich aber auch nicht ausschließen ...Die Zeile 5 sollte dann so aussehen:
for /f "delims=" %%i in ('dir /b /a-d "%Ordner%\*.%Typ%"') do for /f "tokens=1,2 delims=-" %%a in ("%%~ni") do set "Teil1=%%b" & set "Teil2=%%a" & call :ProcessFile "%Ordner%\%%i"
Grüße
bastla
Hallo Flaschback!
Steht "pause" auch in einer eigenen Zeile?
Wie auch immer, so sollte es jedenfalls klappen ("pause" und "Test-echo" gleich weggelassen und noch ein klein wenig verschönert - siehe Festlegung des Trennzeichens in Zeile 4):
Grüße
bastla
Steht "pause" auch in einer eigenen Zeile?
Wie auch immer, so sollte es jedenfalls klappen ("pause" und "Test-echo" gleich weggelassen und noch ein klein wenig verschönert - siehe Festlegung des Trennzeichens in Zeile 4):
@echo off & setlocal
set "Ordner=D:\Test"
set "Typ=txt"
set "Del=-"
for /f "delims=" %%i in ('dir /b /a-d "%Ordner%\*.%Typ%"') do for /f "tokens=1,2 delims=%Del%" %%a in ("%%~ni") do set "Teil1=%%b" & set "Teil2=%%a" & call :ProcessFile "%Ordner%\%%i"
goto :eof
:ProcessFile
:Loop1
if "%Teil1:~,1%"==" " (set "Teil1=%Teil1:~1%" & goto :Loop1)
:Loop2
if "%Teil2:~-1,1%"==" " (set "Teil2=%Teil2:~,-1%" & goto :Loop2)
ren %1 "%Teil1% %Del% %Teil2%%~x1"
goto :eof
bastla
@bastla, sorry für meine Schnelligkeit. Hab mich dann etwas zurückgehalten, um dir den Spaß nicht zu vermießen
Hab das gerade noch mal getestet:
Liegt der Batch im Testverzeichnis, funktioniert nur die DIR-Version, da sonst die Datei gleich wieder erkannt wird.
Anderenfalls gehts auch ohne DIR. (Bill weiß warum )
Hab das gerade noch mal getestet:
Liegt der Batch im Testverzeichnis, funktioniert nur die DIR-Version, da sonst die Datei gleich wieder erkannt wird.
Anderenfalls gehts auch ohne DIR. (Bill weiß warum )
@rubberman
Es gäbe übrigens noch eine dritte Möglichkeit: Ein "pushd" oder "cd /d" in das Testverzeichnis hinein - was dann wohl passiert?
Grüße
bastla
Hab mich dann etwas zurückgehalten, um dir den Spaß nicht zu vermießen
Danke, ganz lieb - war aber wirklich nicht nötig ...Liegt der Batch im Testverzeichnis, funktioniert nur die DIR-Version, da sonst die Datei gleich wieder erkannt wird.
Anderenfalls gehts auch ohne DIR. (Bill weiß warum )
Bist Du Dir hinsichtlich des (ganz) Letzteren sicher? Anderenfalls gehts auch ohne DIR. (Bill weiß warum )
Es gäbe übrigens noch eine dritte Möglichkeit: Ein "pushd" oder "cd /d" in das Testverzeichnis hinein - was dann wohl passiert?
Grüße
bastla
@bastla
Wenn man in das Verzeichnis wechselt, verhält sich der Batch natürlich so, als würde er dort liegen. Und das ist auch schon das einzig logische an dem, was Bill (vermutlich doch nicht) weiß
<edit> und Flaschback hat schon das nächste Mysterium </edit>
Wenn man in das Verzeichnis wechselt, verhält sich der Batch natürlich so, als würde er dort liegen. Und das ist auch schon das einzig logische an dem, was Bill (vermutlich doch nicht) weiß
<edit> und Flaschback hat schon das nächste Mysterium </edit>
wie sieht den der Dateiname der ersten Datei aus?
zum Auswerten - logge die Umbenannten Dateien doch einfach.
bei mir im Testordner benennt die Batch nur die Dateien um, welche "Teilstring-Teilstring2.ext"
oder "Teilstring_Teilstring2.ext" nach Teilstring2-Teilstring.ext bzw Teilstring2_Teilstring.ext um.
alle anders aufgebauten Namen von Dateien werden nicht umbenannt da nicht so aufgebaut im Dateiname.
und es ist auch völlig egal wo die Batch bei mir ist solange der komplette pfad angegeben ist.
wenn die Pfadangabe im REN Befehl fehlt und die Datei nicht im (Batch)-REN verzeichnis ist wird auch nichts umbenannt.
zum Auswerten - logge die Umbenannten Dateien doch einfach.
bei mir im Testordner benennt die Batch nur die Dateien um, welche "Teilstring-Teilstring2.ext"
oder "Teilstring_Teilstring2.ext" nach Teilstring2-Teilstring.ext bzw Teilstring2_Teilstring.ext um.
alle anders aufgebauten Namen von Dateien werden nicht umbenannt da nicht so aufgebaut im Dateiname.
und es ist auch völlig egal wo die Batch bei mir ist solange der komplette pfad angegeben ist.
wenn die Pfadangabe im REN Befehl fehlt und die Datei nicht im (Batch)-REN verzeichnis ist wird auch nichts umbenannt.