Index per Batch erstellen
Guten Tag allerseits,
ich fange an mit der Schilderung meiner Ausgangssituation:
Auf meiner externen Festplatte befinden sich meine Filme. Die Ordnerstruktur ist wie folgt:
Es gibt die Ordner von A - Z. In jedem dieser Ordner liegen Ordner mit dem Namen des Filmes. Die eigentliche .avi-Datei liegt also IMMER in einem eigenen Ordner mit dem Namen des Filmes. Beispielsweise also so:
Filme
Grund dafür ist, dass ich viele Filme habe, die "Beispielfilm - A.avi" und "Beispielfilm - B.avi" heißen, somit ist der übersichtlichkeit halber, jeder Film (egal aus wie vielen "Teilen" er besteht) in einem seperaten Ordner. Der Einhaltlichkeit wegen übernahm ich diese Taktik für jeden Film (auch die die aus nur einer .avi oder .mov oder welches Format auch immer bestehen).
Dann gibt es noch Filme von denen es wirklich mehrere Teile gibt und jeder Teil noch einmal aus Film - A und Film - B besteht. So wie an diesem Beispiel zu sehen:
Filme
Was ich mir jetzt wünsche:
Ich möchte eine CMD-Batch-Datei erstellen, welche mehrere Bedingung beinhalten muss:
- Ich möchte keine Dateien aufgelistet bekommen, da der Ordner in denen die Filme liegen reicht. (Wie in dem Beispiel mit Avatar - Nur der Ordner Avatar und nicht Avatar.avi)
- Ich möchte wie in dem Beispiel mit Harry Potter, nicht Harry Potter UND Harry Potter 1, 2, ... aufgelistet bekommen, sondern, wenn in dem Ordner Harry Potter noch weitere Ordner liegen, dann nur die weiteren Ordner (Harry Potter 1, 2, ...).
- Ich hätte dies gerne als Batch-Skript, damit ich es ausführen kann wann ich möchte.
- Ich hätte diesen Code gerne als Übungszweck um die Thematik besser zu verstehen. Also eine Erklärung wieso genau dieser Befehl nun verwendet wurde, wäre wirklich sehr nett und hilfreich für mich.
Damit sich jetzt auch wirklich jeder vorstellen kann was ich meine, hier die Index-Datei die ich bekommen möchte (anhand der genannten Beispiele):
Ich möchte also keine Pfadangabe, keine Größe oder sonstige Informationen. Nur die Ordnernamen. Ich bekomme einfach keine Idee wie ich dieses Problem bewältigen kann... Vielleicht einer von euch?
ich fange an mit der Schilderung meiner Ausgangssituation:
Auf meiner externen Festplatte befinden sich meine Filme. Die Ordnerstruktur ist wie folgt:
Es gibt die Ordner von A - Z. In jedem dieser Ordner liegen Ordner mit dem Namen des Filmes. Die eigentliche .avi-Datei liegt also IMMER in einem eigenen Ordner mit dem Namen des Filmes. Beispielsweise also so:
Filme
-> A
->> Avatar
->>> Avatar.avi
->> Aviator
->>> Aviator.avi
-> B
->> Blood Diamond
->>> Blood Diamond.avi
...
Dann gibt es noch Filme von denen es wirklich mehrere Teile gibt und jeder Teil noch einmal aus Film - A und Film - B besteht. So wie an diesem Beispiel zu sehen:
Filme
-> H
->> Harry Potter
->>> Harry Potter 1
->>>> Harry Potter 1 - A.avi
->>>> Harry Potter 1 - B.avi
->>> Harry Potter 2
->>>> Harry Potter 2 - A.avi
->>>> Harry Potter 2 - B.avi
...
Ich möchte eine CMD-Batch-Datei erstellen, welche mehrere Bedingung beinhalten muss:
- Ich möchte keine Dateien aufgelistet bekommen, da der Ordner in denen die Filme liegen reicht. (Wie in dem Beispiel mit Avatar - Nur der Ordner Avatar und nicht Avatar.avi)
- Ich möchte wie in dem Beispiel mit Harry Potter, nicht Harry Potter UND Harry Potter 1, 2, ... aufgelistet bekommen, sondern, wenn in dem Ordner Harry Potter noch weitere Ordner liegen, dann nur die weiteren Ordner (Harry Potter 1, 2, ...).
- Ich hätte dies gerne als Batch-Skript, damit ich es ausführen kann wann ich möchte.
- Ich hätte diesen Code gerne als Übungszweck um die Thematik besser zu verstehen. Also eine Erklärung wieso genau dieser Befehl nun verwendet wurde, wäre wirklich sehr nett und hilfreich für mich.
Damit sich jetzt auch wirklich jeder vorstellen kann was ich meine, hier die Index-Datei die ich bekommen möchte (anhand der genannten Beispiele):
Avatar
Aviator
Blood Diamond
Harry Potter 1
Harry Potter 2
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195313
Url: https://administrator.de/forum/index-per-batch-erstellen-195313.html
Ausgedruckt am: 13.05.2025 um 16:05 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
da Du es ja lernen möchtest werde ich die keinen code schreiben der alles schon macht sondern dir ein paar Tips geben wonach du schauen musst und was für befehle hierfür hilfreich sind.
1. dir
Der Dir Befehl listet dir Dateien und / oder Verzeichnisse auf. Hier würd eich den Befehl
dir /S /B /AD verwenden. Wofür die Parameter genau stehen erfährst du indem du in der Eingabeaufforderung
dir /? eingibst.
2. eine For Schleife (Hilfe mit for /?). Hiermit kannst Du unter anderem dir Dir Ausgabe in einzelne Teile
zerlegen. Z.B. so in der Eingabeaufforderung:
FOR /F "tokens=1,2,3,4 delims=\" %i in ('dir /s /B /AD') do @echo %i %j %k %l
bzw. so in einer Batch Datei:
FOR /F "tokens=1,2,3,4 delims=\" %%i in ('dir /s /B /AD') do @echo %%i %%j %%k %%l
da Du es ja lernen möchtest werde ich die keinen code schreiben der alles schon macht sondern dir ein paar Tips geben wonach du schauen musst und was für befehle hierfür hilfreich sind.
1. dir
Der Dir Befehl listet dir Dateien und / oder Verzeichnisse auf. Hier würd eich den Befehl
dir /S /B /AD verwenden. Wofür die Parameter genau stehen erfährst du indem du in der Eingabeaufforderung
dir /? eingibst.
2. eine For Schleife (Hilfe mit for /?). Hiermit kannst Du unter anderem dir Dir Ausgabe in einzelne Teile
zerlegen. Z.B. so in der Eingabeaufforderung:
FOR /F "tokens=1,2,3,4 delims=\" %i in ('dir /s /B /AD') do @echo %i %j %k %l
bzw. so in einer Batch Datei:
FOR /F "tokens=1,2,3,4 delims=\" %%i in ('dir /s /B /AD') do @echo %%i %%j %%k %%l
moin Pireba,
das ist ja nun keine Anleitung. Bitte verschiebe den Beitrag.
als Einzeiler auf der CMD-line wäre es in etwa so
Ansonsten kommt bei mir schon wieder bei diesen Gassenhauern so ein #?@%(&§#$ !
Gruß Phil
das ist ja nun keine Anleitung. Bitte verschiebe den Beitrag.
als Einzeiler auf der CMD-line wäre es in etwa so
> for /r "D:\Verzeichnis" %i in (*.txt) do @set "B=%~ni" &cmd /von /c "2>nul md "%~dpi!B:~0,1!\%~ni\" &if exist "%~dpi!B:~0,1!\%~ni\" (move "%~fi" "%~dpi!B:~0,1!\%~ni\") else >&2 echo Verzeichnis "%~dpi!B:~0,1!\%~ni\" konnte nicht erstellt werden! "
Ansonsten kommt bei mir schon wieder bei diesen Gassenhauern so ein #?@%(&§#$ !
Gruß Phil
Hallo,
delims gibt das Trennzeichen in der For Schleife an an. Standardmäßig ist das ein Leerzeichen. Da ich das nicht möchte gebe ich hier an das es kein Trennzeichen gibt ("delims=")
Das "echo Buchstabe: %%i" was nur als Anzeige gedacht zum nachvollziehen
Aber nur weil was im Internet steht heißt das ja nicht das es stimmen muss. Wie du siehst kannst du For Schleifen in einander Schachteln.
Dies hier sollte nun aber funktionieren:
Zur Beschreibung:
Das ganze läuft so ab:
Z3.1: for /f "delims=" %%a in ('dir /AD /b "C:\Neuer Ordner"') do -> alle Ordner der ersten Ebene (Buchstaben) werden durchlaufen ...
Z3.2: for /f "delims=" %%b in ('dir /AD /b "C:\Neuer Ordner\%%a"') do -> alle Unterordner der ersten Ebene werden durchlaufen (Filmtitel) ...
Z4.1: dir /A-D /b "C:\Neuer Ordner\%%a\%%b" -> Es wird geprüft ob in jedem Ordner der zweiten Ebene direkt eine Datei liegt.
Z4.2: >NUL 2>NUL -> Unterdrückt die Ausgabe (egal ob Dateien existieren oder nicht)
Z4.3: && Bei Nicht Fehler (also Dateien vorhaben ...
Z4.4: echo %%b >> "%USERPROFILE%\Desktop\testtesttest.txt" -> ... wird der Ordnername der zweiten Ebene in die Datei geschrieben
Z5.1: dir /A-D /b "C:\Neuer Ordner\%%a\%%b" -> Es wird geprüft ob in jedem Ordner der zweiten Ebene direkt eine Datei liegt.
Z5.2: >NUL 2>NUL -> Unterdrückt die Ausgabe (egal ob Dateien existieren oder nicht)
Z5.4: for /f "delims=" %%c in ('dir /AD /b "C:\Neuer Ordner\%%a\%%b"') do -> gehe eine Unterordner Ebene tiefer und ...
Z5.5: echo %%c >> "%USERPROFILE%\Desktop\testtesttest.txt" -> ... es wird der Ordnername der dritten Ebene in die Datei geschrieben
delims gibt das Trennzeichen in der For Schleife an an. Standardmäßig ist das ein Leerzeichen. Da ich das nicht möchte gebe ich hier an das es kein Trennzeichen gibt ("delims=")
Das "echo Buchstabe: %%i" was nur als Anzeige gedacht zum nachvollziehen
Aber nur weil was im Internet steht heißt das ja nicht das es stimmen muss. Wie du siehst kannst du For Schleifen in einander Schachteln.
Dies hier sollte nun aber funktionieren:
@echo off
for /f "delims=" %%a in ('dir /AD /b "C:\Neuer Ordner"') do for /f "delims=" %%b in ('dir /AD /b "C:\Neuer Ordner\%%a"') do (
dir /A-D /b "C:\Neuer Ordner\%%a\%%b" >NUL 2>NUL && echo %%b >> "%USERPROFILE%\Desktop\testtesttest.txt"
dir /A-D /b "C:\Neuer Ordner\%%a\%%b" >NUL 2>NUL || for /f "delims=" %%c in ('dir /AD /b "C:\Neuer Ordner\%%a\%%b"') do echo %%c >> "%USERPROFILE%\Desktop\testtesttest.txt"
)
Zur Beschreibung:
Das ganze läuft so ab:
Z3.1: for /f "delims=" %%a in ('dir /AD /b "C:\Neuer Ordner"') do -> alle Ordner der ersten Ebene (Buchstaben) werden durchlaufen ...
Z3.2: for /f "delims=" %%b in ('dir /AD /b "C:\Neuer Ordner\%%a"') do -> alle Unterordner der ersten Ebene werden durchlaufen (Filmtitel) ...
Z4.1: dir /A-D /b "C:\Neuer Ordner\%%a\%%b" -> Es wird geprüft ob in jedem Ordner der zweiten Ebene direkt eine Datei liegt.
Z4.2: >NUL 2>NUL -> Unterdrückt die Ausgabe (egal ob Dateien existieren oder nicht)
Z4.3: && Bei Nicht Fehler (also Dateien vorhaben ...
Z4.4: echo %%b >> "%USERPROFILE%\Desktop\testtesttest.txt" -> ... wird der Ordnername der zweiten Ebene in die Datei geschrieben
Z5.1: dir /A-D /b "C:\Neuer Ordner\%%a\%%b" -> Es wird geprüft ob in jedem Ordner der zweiten Ebene direkt eine Datei liegt.
Z5.2: >NUL 2>NUL -> Unterdrückt die Ausgabe (egal ob Dateien existieren oder nicht)
Z5.5: echo %%c >> "%USERPROFILE%\Desktop\testtesttest.txt" -> ... es wird der Ordnername der dritten Ebene in die Datei geschrieben