bob777
Goto Top

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 face-smile

hoffe dass das einer versteht ;)

Danke und Gruss
Kommentar vom Moderator Biber am 03.05.2010 um 09:31:08 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Shell".

Content-Key: 141897

Url: https://administrator.de/contentid/141897

Ausgedruckt am: 29.03.2024 um 00:03 Uhr

Mitglied: AdmWomby
AdmWomby 02.05.2010 um 06:48:40 Uhr
Goto Top
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ß
Mitglied: bastla
bastla 02.05.2010 um 09:08:38 Uhr
Goto Top
Hallo bob777 und willkommen im Forum!

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
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
Mitglied: bob777
bob777 02.05.2010 um 20:52:37 Uhr
Goto Top
Servus face-smile will nicht so ganz ;)


hmm.. vll. hab ich es doch zu blöde beschrieben :D

habe eine Ordner (der inhalt wird immer anders sein )

da drin sind fussballspiele.

Bundesliga.2009-10.Matchday.28.Review.WS.PDTV.XviD-433 (Ordner)
Bundesliga.2009-10.Matchday.29.Review.WS.PDTV.XviD-433 (Ordner)
Bundesliga.2009-10.Matchday.30.Review.WS.PDTV.XviD-433 (Ordner)
..


in jedem ordner ist die übertragungs.avi


433-bl0910md28r.ws.pdtv.xvid.avi
433-bl0910md29r.ws.pdtv.xvid.avi
433-bl0910md30r.ws.pdtv.xvid.avi
..


Jetzt sollen die auf klick die ordnernamen bekommen face-smile ohne die sonderzeichen "." "-" "_"

geht sowas ?
Mitglied: bastla
bastla 02.05.2010 um 22:06:21 Uhr
Goto Top
Hallo bob777!

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
Das sollte unter der Voraussetzung funktionieren, dass es in jedem Ordner nur eine Datei des festgelegten Typs (lt Zeile 4) gibt.

Grüße
bastla
Mitglied: bob777
bob777 13.05.2010 um 17:31:53 Uhr
Goto Top
SERVUS

Sorry habe neuen Job face-smile und keine Zeit gehabt um früher zu schieben.

habe die Datei getestet und es wurde alles umgeschrieben, wie geplant ;) aber ohne die endung am ende ... face-sad


habe aber rausbekommen wies geht. face-smile bei dateiname .AVI dazugeschrieben und passt alels wies soll face-smile

:: usw
:: jetzt kann umbenannt werden
ren "%~1\*.%Typ%" "%Dateiname%.avi"  
:: und wieder in's Hauptprogramm zum nächsten Ordner  
goto :eof



Aber jetzt gehts weiter face-smile

möchte dass die dateinamen ohne einige werte sind.

Bundesliga.2009-10.Matchday.28.Review.WS.PDTV.XviD-433

soll werden >>

Bundesliga.10.Matchday.28.Review.avi

kann man also jetzt irgendwie ;) es anstellen dass bestimmte werde nicht übernommenwerden in den avinamen.. also OHNE DVD, 2009, WS, PDTV, .XviD ,433...

hier trag ich dann neue sachen dazu wenn gebraucht.

ich danke jetzt schon sehr aber wenn das möglich ist dann rockt das haus echt face-smile

gruss
Mitglied: bastla
bastla 13.05.2010 um 17:42:28 Uhr
Goto Top
Hallo bob777!

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%.*"
Zum Ausfiltern der genannten Bestandteile könntest Du Dich an den Zeilen 13 und 14 orientieren:
set "Dateiname=%Dateiname:.DVD=%"
set "Dateiname=%Dateiname:2009-=%"
set ...
Ersetzt wird also immer, was zwischen Doppelpunkt und Gleichheitszeichen steht durch das (hier einfach gar nix face-wink), was zwischen Gleichheitszeichen und zweitem (=schließenden) Prozentzeichen steht.

Grüße
bastla
Mitglied: bob777
bob777 13.05.2010 um 19:19:05 Uhr
Goto Top
face-smile das ist super ... GÖTTLICH face-smile

eigentlich ist das thema damit angeschlossen ;) hab jetzt am ende der dateinamen 3 -4 leerzeichen aber ich denk das stört nicht face-smile

aber ich hab noch eine sache face-smile würde gerne dass das entpacken der rar auch per batch passiert ..

das selbe verfahren face-smile

ein ordner mit den bundesliga übertragungs ordnern.

jetzt sind da splits und einer rar.. die sollen antpacket werden und zwar in ihren ordner bleiben face-smile wenns geht die rars und splits gelöscht werden face-smile geht sowas ? hab schon gesucht aber komm nicht so dahinter ;)
Mitglied: Biber
Biber 13.05.2010 um 19:29:21 Uhr
Goto Top
Moin bob777,

Zitat von @bob777:
eigentlich ist das thema damit angeschlossen ;)
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 face-smile
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
Mitglied: bob777
bob777 13.05.2010 um 19:39:46 Uhr
Goto Top
Hehe face-smile danke für diese milde Rüge ;)

eigentlich wollte ich einen neuen Beitrag aufmachen aber da hat der Bob nicht auf die innere Stimme gehört :D

Also ich sag es so es ist angeschlossen das Thema .. sollte ich Probleme haben mit den überflüssigen Leerzeichen am Ende der Filenamen so frag ich noch mal nach!

Jetzt sag cih noch mal DANKE und man sieht sich im anderem Beitrag face-smile
Mitglied: bastla
bastla 13.05.2010 um 20:27:21 Uhr
Goto Top
Hallo bob777!

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
Mitglied: bob777
bob777 17.05.2010 um 21:22:51 Uhr
Goto Top
Haj

eine sache ;) wenn CD1 und CD2 entpackt wird dann sind zwei avi dateien im einem ordner.

hier hickt das ganze script ;) und lässt immer eine datei.avi umbenannt! es würde cool sein wenn das script noch erkennt was a und b ist also cd1 und cd2 und das dann übernimmt oder per zähler listet.


@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
ren "%~1\*.%Typ%" "%Dateiname%.*"  
:: und wieder in's Hauptprogramm zum nächsten Ordner 
goto :eof
Mitglied: bastla
bastla 17.05.2010 um 21:31:49 Uhr
Goto Top
Hallo bob777!
wenn das script noch erkennt was a und b ist also cd1 und cd2 und das dann übernimmt oder per zähler listet.
Woran ist das zu erkennen? Kannst Du das an konkreten Beispielen der Dateinamen zeigen?

Grüße
bastla
Mitglied: bob777
bob777 17.05.2010 um 21:47:06 Uhr
Goto Top
eigentlich nur an einem a oder einem b am ende der dateinamen.

liga2009faktorya.avi
liga2009faktoryb.avi

oder ab und zu so

liga2009faktory_a.avi
liga2009faktory_b.avi

ich wüsste nicht wie man es sonst richtig unterscheiden kann.
Mitglied: bastla
bastla 22.05.2010 um 15:18:54 Uhr
Goto Top
Hallo bob777!

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
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:
liga2009faktory.avi
liga2009faktory2.avi
Grüße
bastla
Mitglied: GismoCrack
GismoCrack 15.04.2014 um 04:23:22 Uhr
Goto Top
Hallo,


habe nun dank diesen beitrages auch meine leicht abgeänderte form von der Batch. face-smile

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
Mitglied: bastla
bastla 15.04.2014 um 09:40:03 Uhr
Goto Top
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"
Grüße
bastla
Mitglied: GismoCrack
GismoCrack 15.04.2014 um 11:19:42 Uhr
Goto Top
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 "ren" ein "move" an
(ungetestet):
move "%~1\*.%Typ%" "%~1\..\%Dateiname%.mkv"
> 
Grüße
bastla



klappt super,vielen lieben dank. *thumbsup*