rotnasenkater
Goto Top

Ordnerinhalt mit Ordnernamen umbenennen

Servus, liebe Gemeinde!

Ich habe ein kleines Anliegen und keienrlei Ahnung von Batch-Programmierung, deswegen hoffe ich auf Hilfe von Experten. Folgender Sachverhalt: ich habe einige Serien, bei denen die einzelnen Folgen in Unterverzeichnissen sind und komisch benannt sind. Ich möchte nun die einzelnen Folgen aus den Unterverzeichnissen verschieben und sie dabei umbenennen, so daß sie den Namen des Verzeichnisses tragen. Zur Veranschaulichung:

e:\Serie S01E01 - Pilotfilm\sfdgsafjsdf.mkv soll werden zu e:\Serie S01E02 - Pilotfilm.mkv
e:\Serie S01E02 - Der Anfang\fggfhfgh.mkv soll werden zu e:\Serie S01E02 - Der Anfang.mkv
e:\Serie S01E03 - Das Ende\mknkvbmnkbvmnk.mkv soll werden zu e:\Serie S01E03 - Das Ende.mkv


Bis jetzt habe ich das immer per Hand gemacht, aber das geht doch sicherlich auch per Batch, oder?

Grüße und dankeschön im voraus

Content-Key: 310124

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

Printed on: April 25, 2024 at 07:04 o'clock

Member: rubberman
Solution rubberman Jul 17, 2016 at 15:41:36 (UTC)
Goto Top
Hallo Rotnasenkater,

ja, wird sicher zu machen sein.

@echo off &setlocal DisableDelayedExpansion
set "root=E:\"  

pushd "%root%"  
for /d %%i in (*) do (
  for %%j in ("%%i\*.mkv") do (  
    move "%%j" "%%i.mkv"  
    rd /s /q "%%i"  
  )
)
popd
Grüße
rubberman
Member: Rotnasenkater
Rotnasenkater Jul 17, 2016 at 16:56:52 (UTC)
Goto Top
Vielen Dank für die schnelle und hilfreiche Antwort! Ich habe Dein Script mal etwas abgeändert und nun werden die Dateien im Aufrufverzeichnis erstellt. Ist übersichtlicher, als wenn ich alles in ein Rootverzeichnis verschieben lasse. Fiel mir aber erst beim Testen ein - 'Tschuldigung...

for /d %%i in (*) do ( 

  for %%j in ("%%i\*.mkv") do (   

    move "%%j" "%%i.mkv"   

    rd /s /q "%%i"   

  ) 

)
Member: rubberman
rubberman Jul 17, 2016 at 18:56:54 (UTC)
Goto Top
Natürlich hättest du der Variablen auch jeden anderen Pfad zuweisen können. Mit "root" meinte ich in diesem Fall nicht das Rootverzeichnis des Laufwerks, sondern das Rootverzeichnis für deine mkv Dateien.

Grüße
rubberman
Member: Rotnasenkater
Rotnasenkater Jul 17, 2016 updated at 20:27:01 (UTC)
Goto Top
Ach so, das wußte ich doch nicht.

Die ersten 3 Zeilen und die letzte Zeile kapiere ich sowieso nicht. "@echo off" kenne ich ja noch aus meiner DOS-Zeit (habe seit 1989 mit PCs zu tun...), aber "setlocal DisableDelayedExpansion" kenne ich überhaupt nicht und "pushd" / "popd" kenne ich vom Assembler her. Was bewirken denn diese beiden Befehle bei der Batch-Programmierung, wohin wird was verschoben und am Schluß wieder geholt?

Kannst Du vielleicht einem Batch-Legastheniker mal alles außerhalb der For-Schleife erkären? Bin immer froh, wenn ich was lernen kann...

Grüße
Member: rubberman
rubberman Jul 17, 2016 at 20:56:28 (UTC)
Goto Top
Das setlocal erzeugt ein Subumgebung (die mit endlocal oder Scriptende wieder aufgehoben wird). Die Delayed Expansion (verzögerte Variablenerweiterung) würde benötigt, um Änderungen an Variablen in einem Block von Kommandozeilen abgreifbar zu machen. Diese könnte auch per Registry Einstellung enabled sein, was in deinem Fall Fehler bei Datei-/Verzeichnisnamen hervorrufen würde, die Ausrufezeichen beinhalten. Vorbeugend habe ich dieses Feature deshalb für den gesamten Batchcode disabled.

Pushd und popd treten immer paarweise auf. Mit pushd wird in das angegebene Verzeichnis gewechselt, das somit für den weiteren Ablauf das neue Arbeitsverzeichnis ist. Mit popd wird wieder zurück gewechselt. Die Verwendung von pushd und popd hat einige Vorteile gegenüber dem cd Befehl.
  • Es gibt keine Beschränkung beim Wechsel auf ein anderes Laufwerk (cd würde dazu die Option /d benötigen)
  • Viele Befehle können nicht mit Netzwerkpfaden arbeiten. Pushd mappt in dem Fall ein temporäres Netzlaufwerk, das mit popd wieder gelöscht wird.
  • Mit cd wird das ursprüngliche Arbeitsverzeichnis nicht gespeichert und man kann nicht einfach zurückkehren. (Gut, das ist in deinem Fall egal.)

Grüße
rubberman