Batch Datei ? Ordnernamen to Dateinamen
Hallo
Auch ich platz bei mit einer Frage rein ;)
Suche schon lange vergeblich nach einem Weg Ordnernamen zu Dateien zu lenken.
In einem Ordner sind Unterordner und in diesen Ordnern sind Dateien.
Ordner -
| _unter.ordner1/datei.txt
| _unter.ordner2/datei.txt
| _unter.ordner3/datei.txt
| _unter.ordner4/datei.txt
| _unter.ordner5/datei.txt
jetzt würde es top sein wenn auf klick der batch datei die dateinamen zu ordnernamen werden, also /unter ordner1.txt, /unter ordner2.txt, /unter ordner3.txt, ...
und damit noch schwerer wird.. in den ordnernamen sind sonderzeichen drin wie "." und "_" und "-" und die sollen in den dateinamen zu einem leerzeichen werden.
Wenn das mit den sonderzeichen zu wild ist dann würde ich dankbar sein für die einfache variante
hoffe dass das einer versteht ;)
Danke und Gruss
Auch ich platz bei mit einer Frage rein ;)
Suche schon lange vergeblich nach einem Weg Ordnernamen zu Dateien zu lenken.
In einem Ordner sind Unterordner und in diesen Ordnern sind Dateien.
Ordner -
| _unter.ordner1/datei.txt
| _unter.ordner2/datei.txt
| _unter.ordner3/datei.txt
| _unter.ordner4/datei.txt
| _unter.ordner5/datei.txt
jetzt würde es top sein wenn auf klick der batch datei die dateinamen zu ordnernamen werden, also /unter ordner1.txt, /unter ordner2.txt, /unter ordner3.txt, ...
und damit noch schwerer wird.. in den ordnernamen sind sonderzeichen drin wie "." und "_" und "-" und die sollen in den dateinamen zu einem leerzeichen werden.
Wenn das mit den sonderzeichen zu wild ist dann würde ich dankbar sein für die einfache variante
hoffe dass das einer versteht ;)
Danke und Gruss
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 03.05.2010 um 09:31:08 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Shell".
Content-ID: 141897
Url: https://administrator.de/forum/batch-datei-ordnernamen-to-dateinamen-141897.html
Ausgedruckt am: 04.04.2025 um 15:04 Uhr
17 Kommentare
Neuester Kommentar
moin,
ich hoffe ich habe es halbwegs verstanden.
hier mal ein link für den ersten ansatz.
http://www.arstechnica.de/index.html?name=http://www.arstechnica.de/com ...
dort wird dr pfad als variable ausgegeben und danach kannst du doch die gefundene datei einfach umbenennen ( mit dem pfadnamen ). wenn es mehrere dateien seien sollten würde ich einen zähler hinten dran hängen.
1. pfad als variable
2. dateiname als variable
3.bei mehreren dateien eine zählschleife ( dateiname=dateiname&zähler )
4. rename
sollte eigentlich funktionieren, hab es aber noch icht getestet ( bitte erst testen mit testdaten keine echten )
gruß
ich hoffe ich habe es halbwegs verstanden.
hier mal ein link für den ersten ansatz.
http://www.arstechnica.de/index.html?name=http://www.arstechnica.de/com ...
dort wird dr pfad als variable ausgegeben und danach kannst du doch die gefundene datei einfach umbenennen ( mit dem pfadnamen ). wenn es mehrere dateien seien sollten würde ich einen zähler hinten dran hängen.
1. pfad als variable
2. dateiname als variable
3.bei mehreren dateien eine zählschleife ( dateiname=dateiname&zähler )
4. rename
sollte eigentlich funktionieren, hab es aber noch icht getestet ( bitte erst testen mit testdaten keine echten )
gruß
Hallo bob777 und willkommen im Forum!
Ein Grundgerüst für Dein Vorhaben könnte so aussehen:
Nicht berücksichtigt ist derzeit die Möglichkeit, dass eine Datei mit dem neuen Namen im Ordner (zusätzlich zur "datei.txt") bereits existiert; was wäre in diesem Fall zu tun?
Grüße
bastla
Ein Grundgerüst für Dein Vorhaben könnte so aussehen:
@echo off & setlocal
set "Basis=D:\Ordner mit vielen Unterordnern"
:: Name der umzubenennenden Datei
set "Datei=datei.txt"
:: alle Unterordner des Basisordners durchgehen und im Unterprogramm ":ProcessFolder" behandeln
for /d %%i in ("%Basis%\*.*") do set "Dateiname=%%~nxi" & call :ProcessFolder "%%i"
:: hier ist das Ende des Batches
goto :eof
:ProcessFolder
:: Gibt's in diesem Ordner (noch) die gesuchte Datei? Wenn nein war's das schon ...
if not exist "%~1\%Datei%" goto :eof
:: Ersetzung der "Sonderzeichen" im (neuen) Dateinamen
set "Dateiname=%Dateiname:.= %"
set "Dateiname=%Dateiname:_= %"
:: usw
:: jetzt kann umbenannt werden
ren "%~1\%Datei%" "%Dateiname%
:: und wieder in's Hauptprogramm zum nächsten Ordner
goto :eof
Grüße
bastla
Hallo bob777!
Wenn also der Dateiname nicht konstant ist, aber anscheinend der Typ (immer .avi ?) als Erkennungskriterium dienen kann, dann etwa so:
Das sollte unter der Voraussetzung funktionieren, dass es in jedem Ordner nur eine Datei des festgelegten Typs (lt Zeile 4) gibt.
Grüße
bastla
Wenn also der Dateiname nicht konstant ist, aber anscheinend der Typ (immer .avi ?) als Erkennungskriterium dienen kann, dann etwa so:
@echo off & setlocal
set "Basis=D:\Ordner mit vielen Unterordnern"
:: Typ der umzubenennenden Datei
set "Typ=avi"
:: alle Unterordner des Basisordners durchgehen und im Unterprogramm ":ProcessFolder" behandeln
for /d %%i in ("%Basis%\*.*") do set "Dateiname=%%~nxi" & call :ProcessFolder "%%i"
:: hier ist das Ende des Batches
goto :eof
:ProcessFolder
:: Ersetzung der "Sonderzeichen" im (neuen) Dateinamen
set "Dateiname=%Dateiname:.= %"
set "Dateiname=%Dateiname:_= %"
:: usw
:: jetzt kann umbenannt werden
ren "%~1\*.%Typ%" "%Dateiname%"
:: und wieder in's Hauptprogramm zum nächsten Ordner
goto :eof
Grüße
bastla
Hallo bob777!
Sorry wegen des Dateityps - die Ergänzung hättest Du auch so vornehmen (und damit ev etwas universeller machen) können:
Zum Ausfiltern der genannten Bestandteile könntest Du Dich an den Zeilen 13 und 14 orientieren:
Ersetzt wird also immer, was zwischen Doppelpunkt und Gleichheitszeichen steht durch das (hier einfach gar nix
), was zwischen Gleichheitszeichen und zweitem (=schließenden) Prozentzeichen steht.
Grüße
bastla
Sorry wegen des Dateityps - die Ergänzung hättest Du auch so vornehmen (und damit ev etwas universeller machen) können:
ren "%~1\*.%Typ%" "%Dateiname%.*"
set "Dateiname=%Dateiname:.DVD=%"
set "Dateiname=%Dateiname:2009-=%"
set ...
Grüße
bastla
Moin bob777,
Jepp, und uneigentlich auch. Haken dran und neuen Beitrag für eine neue Fragestellung.
So ist es hier Sitte und Regel.
Außerdem... sonst würden hier gewisse Moderatoren auch mit Bobs Schlitten fahren.
Bitte lass uns (spätestens nach Beseitigung des o.a. Fehlerchens) diese Frage abschliessen... du wirst auch in einem neuen Beitrag Antworten bekommen.
Grüße
Biber
Jepp, und uneigentlich auch. Haken dran und neuen Beitrag für eine neue Fragestellung.
So ist es hier Sitte und Regel.
Außerdem... sonst würden hier gewisse Moderatoren auch mit Bobs Schlitten fahren.
hab jetzt am ende der dateinamen 3 -4 leerzeichen aber ich denk das stört nicht 
Na watt nu - funktioniert es jetzt oder funktioniert es fast? Sprechen Sie jetzt...Bitte lass uns (spätestens nach Beseitigung des o.a. Fehlerchens) diese Frage abschliessen... du wirst auch in einem neuen Beitrag Antworten bekommen.
Grüße
Biber
Hallo bob777!
Die
Grüße
bastla
Die
überflüssigen Leerzeichen am Ende der Filenamen
sind wohl auf die Ersetzung der vorkommenden Punkte zurückzuführen - daher am besten die übrigen Ersetzungen vorweg (= vor der Zeile 13) erledigen und dabei auch - wie bei meiner Beispielzeile für ".DVD" - berücksichtigen, dass die nicht benötigten Punkte auch in den zu ersetzenden Text mit aufgenommen werden ...Grüße
bastla
Hallo bob777!
Als ungetester Ansatz:
Soferne es mehr als eine ".avi"-Datei im Ordner gibt, wird ab der zweiten Datei eine laufende Nummer (ist einfacher, als mit den Buchstaben zu hantieren) an den Namen angefügt - für Dein Beispiel oben sollte das Ergebnis dann so aussehen:
Grüße
bastla
Als ungetester Ansatz:
@echo off & setlocal
set "Basis=f:\xx2"
:: Typ der umzubenennenden Datei
set "Typ=avi"
:: alle Unterordner des Basisordners durchgehen und im Unterprogramm ":ProcessFolder" behandeln
for /d %%i in ("%Basis%\*.*") do set "Dateiname=%%~nxi" & call :ProcessFolder "%%i"
:: hier ist das Ende des Batches
goto :eof
:ProcessFolder
:: Ersetzung der "Sonderzeichen" im (neuen) Dateinamen
set "Dateiname=%Dateiname:.= %"
set "Dateiname=%Dateiname:_= %"
set "Dateiname=%Dateiname:DVD=%"
:: usw
:: jetzt kann umbenannt werden
:: die erste (und ev einzige Datei) benötigt keinen Zusatz
set "Zusatz="
for /f "delims=" %%i in ('dir /b /a-d /on "%~1\*.%Typ%") do call :RenameFile "%~1\%%i"
:: und wieder in's Hauptprogramm zum nächsten Ordner
goto :eof
:RenameFile
:: wenn die Datei mit dem aktuellen Zusatzwert noch nicht vorhanden ist, kann umbenannt werden
if not exist "%~dp%1%Dateiname%Zusatz%%~x1" goto :DoIt
:: Zusatz (lfd Nr) hochzählen - bei der ersten Datei, die den Zusatz benötigt, ist dieser 2
if not defined Zusatz (set /a Zusatz=2) else (set /a Zusatz+=1)
goto :RenameFile
:DoIt
:: Umbenennung durchführen ...
ren %1 "%Dateiname%Zusatz%%~x1"
:: ... und zurück zur nächsten Datei
goto :eof
liga2009faktory.avi
liga2009faktory2.avi
bastla
Hallo,
habe nun dank diesen beitrages auch meine leicht abgeänderte form von der Batch.
danke erstmal für alle die helfen.
meine Batch sieht nun so aus:
@echo off & setlocal
set "Basis=D:\ordner1\ordner2\ordner3
:: Typ der umzubenennenden Datei
set "Typ=mkv"
:: alle Unterordner des Basisordners durchgehen und im Unterprogramm ":ProcessFolder" behandeln
for /d %%i in ("%Basis%\*.*") do set "Dateiname=%%~nxi" & call :ProcessFolder "%%i"
:: hier ist das Ende des Batches
goto :eof
:ProcessFolder
ren "%~1\*.%Typ%" "%Dateiname%.mkv"
:: und wieder in's Hauptprogramm zum nächsten Ordner
goto :eof
jetzt ist die datei zwar im ordner umbenannt aber wo bzw wie muss ich den move befehl einsetzen,wenn ich die datei aus den ordner in den hauptordner bekommen will?
also das so gesehen die datei aus ordner 3 in den ordner 2 wandert?
LG
Mirko
habe nun dank diesen beitrages auch meine leicht abgeänderte form von der Batch.
danke erstmal für alle die helfen.
meine Batch sieht nun so aus:
@echo off & setlocal
set "Basis=D:\ordner1\ordner2\ordner3
:: Typ der umzubenennenden Datei
set "Typ=mkv"
:: alle Unterordner des Basisordners durchgehen und im Unterprogramm ":ProcessFolder" behandeln
for /d %%i in ("%Basis%\*.*") do set "Dateiname=%%~nxi" & call :ProcessFolder "%%i"
:: hier ist das Ende des Batches
goto :eof
:ProcessFolder
ren "%~1\*.%Typ%" "%Dateiname%.mkv"
:: und wieder in's Hauptprogramm zum nächsten Ordner
goto :eof
jetzt ist die datei zwar im ordner umbenannt aber wo bzw wie muss ich den move befehl einsetzen,wenn ich die datei aus den ordner in den hauptordner bekommen will?
also das so gesehen die datei aus ordner 3 in den ordner 2 wandert?
LG
Mirko
Hallo GismoCrack!
Vorweg: Mit "Code"-Formatierung (lässt sich auch nachträglch einfügen) liest sich ein Batch leichter ...
Wenn Du gleichzeitig umbenennen und verschieben willst, bietet sich statt des "
Grüße
bastla
Vorweg: Mit "Code"-Formatierung (lässt sich auch nachträglch einfügen) liest sich ein Batch leichter ...
Wenn Du gleichzeitig umbenennen und verschieben willst, bietet sich statt des "
ren
" ein "move
" an (ungetestet):move "%~1\*.%Typ%" "%~1\..\%Dateiname%.mkv"
bastla
Zitat von @bastla:
Hallo GismoCrack!
Vorweg: Mit "Code"-Formatierung (lässt sich auch nachträglch
einfügen) liest sich ein Batch leichter ...
Wenn Du gleichzeitig umbenennen und verschieben willst, bietet sich statt des "
(ungetestet):
Grüße
bastla
Hallo GismoCrack!
Vorweg: Mit "Code"-Formatierung (lässt sich auch nachträglch
einfügen) liest sich ein Batch leichter ...
Wenn Du gleichzeitig umbenennen und verschieben willst, bietet sich statt des "
ren
" ein "move
" an(ungetestet):
move "%~1\*.%Typ%" "%~1\..\%Dateiname%.mkv"
>
bastla
klappt super,vielen lieben dank. *thumbsup*