commodore
Goto Top

Batch, Dateien verschieben - Ordner löschen

Hallo und Grüsse aus dem hohen Norden,

leider hab ich so lange an der 1. Ausführung meines Problems geschrieben, das ich abgemeldet wurde und der gesamte Artikel futsch ist.
Also, Auf ein neues! Ich habe folgendes Problem:

Ich habe ein Bilderarchiv welches an der Zeit wäre zu sortieren bzw. neu zu strukturieren. Leider gibt es hierbei einige Komplikationen:

Ersteimal ein Überblick in die Ordnerhierachie:

1.Ebene - Ein Gesamtordner, der in der ...
2.Ebene - ...sehr viele Unterordner mit unterschiedlichen Namen enthält, der widerum in der...
3.Ebene - ...jeweils einen Ordner Namens "pics" enthält, wo die Bilder enthalten sind.

Bsp:
"Bildarchiv\656i\pics\67.jpg"
.
.
"Bildarchiv\012\pics\56.jpg"

Ich möchte die Bilder in den übergeordneten Ordner verschieben und den nun leeren pics Ordner löschen.

Bsp:
"Bildarchiv\656i\67.jpg"
.
.
"Bildarchiv\012\56.jpg"

Ich habe eine kleine Batch geschrieben, die aber mein Problem nicht vollständig abdeckt, da Sie in jeden "pics" Ordner per Hand zu kopieren wäre, anschliessend auszuführen wäre und es dadurch nicht wirklich eine Zeitersparniss wäre:

[copy.bat]
move *.jpg ..\

Wie gesagt es ist nur ein rudimentärer Ansatz zur Lösung dieses Problems.

Meine Lösung wäre es eine Batch zu schreiben, die die "copy.bat" in jedes "pics" Verzeichnis kopieren würde, diese dort ausführen lässt und anschliessend den Ordner "pics" löscht.
Aber der Kasus Knacktus ist für mich der, das die Ordner der 2. Ebene verschiedene (fast zufällige) Namen haben (Bsp. "45i","064v", usw.) und ich dadurch auch nicht in der Lage bin, auf Grund meiner beschränkten Batch Kenntniss, die Batchdatei für jeden Ordner in die 3.Ebene zu kopieren.

Ich habe auch folgenden Artikel studiert, konnte aber wegen nur Grundlegender Batchkenntniss keine Lösung zu diesem Problem ableiten:
Ordnerstruktur auflösen, neue erstellen, Dateien verschieben

Wenn Ihr ein solches Problem schon einmal gelöst habt, es einfach wisst oder Lust am Kniffligem habt, dann zögert bitte nicht, diesen für mich Gordischen Knoten aufzulösen.

Mein Dank ist euch in jedem Fall Gewiss.


MfG
Commodore

Content-Key: 95949

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: Biber
Biber Sep 02, 2008 at 23:03:29 (UTC)
Goto Top
Moin Commodore,

wenn es eine einmalige Aktion ist, verzichte auf einen Batch und feuere folgendes vom CMD-Prompt ab:

for /d %i in (x:\deinpfad\bildarchiv\*) do @move "%i\pics\*.jpg" "%i\" & rd "%i\pics"  


Die Anführungszeichen nur für den Fall, dass einzelne *.jpg's oder "x:\deinpfad\" Leerzeichen enthalten.

Für einen gefahrlosen Probedurchlauf "@move" durch "@echo move" ersetzen.

Grüße
Biber
Member: Commodore
Commodore Sep 03, 2008 at 09:20:39 (UTC)
Goto Top
Moin Moin Biber,

ich danke dir für dein Lösungsvorschlag, ich werde mich jetzt ransetzen und versuchen die Befehlszeile zu verstehen. Dafür muss ich aber noch ein bischen Batch lernen, da ich es ja auch verstehen muss bzw. will.

MfG
Commodore
Member: Commodore
Commodore Sep 03, 2008 at 11:30:03 (UTC)
Goto Top
Ich bin jetzt schon mal ein ganzes Stück weiter was das Verständnis anbelangt:
%i ist der Platzhalter (wie in C z.B. für float-variablen);
in der for-in-do Schleife ist "*" das Jokerzeichen für den Match-Code.

Bloß was ist das "/d" nach der for-Schleife und warum das "@"-Zeichen vor dem "move"?

Anmerkung: Wenn ich diesen Befehl in eine Batch schreiben wollte, müsste ich doch den ersten Platzhalter "%i" in "%%i" umschreiben, Korrekt?

Auf jeden Fall funktioniert dein Code tadellos und bedanke mich für deine Lösung und prompte Antwort.

MfG
Commodore
Member: Biber
Biber Sep 03, 2008 at 11:48:07 (UTC)
Goto Top
Moin Commodore,

%i ist der Platzhalter (wie in C z.B. für float-variablen);
Jein... %a, %b, %c... etc sind die dokumentierten Platzhalter für "dynamische" Laufzeitvariablen, die nur innerhalb einer FOR-Anweisung existieren. Mit zwei Prozentzeichen -also %%a, %%b, %%c.... werden diese im Batch geschrieben.
Siehe in der Hilfe zu FOR-> For/? am CMD-Prompt.
in der for-in-do Schleife ist "*" das Jokerzeichen für den Match-Code.
Jepp.
Bloß was ist das "/d" nach der for-Schleife und warum das "@"-Zeichen vor dem "move"?
For /D --> auf Directories bezogen. Siehe For /?
"@" vor einem CMD-Befehl unterdrückt das "echo". Unwichtig.

Grüße
Biber
Member: Commodore
Commodore Sep 03, 2008 at 11:59:28 (UTC)
Goto Top
Ach so... ohne das /D würde der Computer nach Dateien und nicht nach Ordnern suchen, Alles klar.
Super damit wäre alles geklärt.

Danke nochmals!

MfG
Sönke