44227
Goto Top

Per Batch dateien aus Unterordner in den Hauptordner verschieben

Hallo erstmal,

ich hoffe, dass ist der richtige Ort, um diese Frage zu stellen.

In meiner Verzeichnisstruktur habe ich ca. 100 Ordner, von den manche einen Unterordner haben und manche nicht.

Ich möchte gerne eine Batch schreiben, die alle 100 Hauptordner durchläuft und wenn in einem Hauptordner ein Unterordner vorhanden ist, die Dateien, die im Unterordner sind in den Hauptordner verschiebt.

Geht so was auf einem Rechner, auf dem WinXp Home läuft?

Danke im Voraus,
Nermin

Content-Key: 52619

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

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

Member: bastla
bastla Feb 25, 2007 at 20:52:23 (UTC)
Goto Top
Hallo Hajvazovic und willkommen im Forum!

Wenn es nur eine Unterordnerebene gibt (also die Unterordner nicht selbst noch weitere Unterordner haben), könntest Du folgenden Batch verwenden:
@echo off
cd /d C:\\

for /f "delims=" %%i in ('dir /b /ad') do (  
    for /f "delims=" %%j in ('dir "%%i" /b /ad') do @echo move /y "%%i\%%j\*.*" "%%i"  
)
Diese Zeilen speicherst Du als "MoveUp.bat" (oder mit einem Namen, der Dir besser gefällt, solange er auf ".bat" endet) in das Hauptverzeichnis (den Ordner, in dem sich Deine 100 Ordner befinden, zB "C:\"). Dieser Ordner muss auch in der zweiten Zeile nach dem "cd /d" stehen.

Wenn Du die gespeicherte Batchdatei ausführst, wird Dir zunächst nur angezeigt, was passieren würde (zum Abbrechen die Tastenkombination "Strg"-"c" verwenden). Sofern der Ablauf für Dich ok ist, entfernst Du aus der vierten Batchzeile das "@echo " zwischen dem "do" und dem "move". Ab jetzt verschiebt die Batchdatei wirklich.

Grüße
bastla
Member: Biber
Biber Feb 25, 2007 at 21:34:04 (UTC)
Goto Top
Moin Hajvazovic,

willkommen im Forum.

Ich halte Deinen Plan nicht für bis ins Detail ausgefeilt, aber handwerklich lösbar ist es mit folgender Zeile vom CMD-Prompt:
for /d %i in (\*.*) do cmd /c for /r "%i\" %j in (*.*) do <b>@ECHO</b> move "%j" "%i\*.*"  

Einschränkungen:
- kann relativ gefahrlos abgefeuert werden, durch das @echo zeigt die Anweisung nur, was sie tun würde... nur Simulation.
- es wird maximal in die erste Unterverzeichnisebene (i.e. "D:\temp" oder "C:\Programme") verschoben, nicht in die Root-Ebene C:\ oder D:\
- der MOVE-Befehl ist ohne Schalte /y aufgerufen und würde deshalb keine vorhandenen Dateien löschen.
- leere Verzeichnisse werden nicht gelöscht. Dafür kann später eine globale "FOR /R .....RD "%i""-Anweisung erfolgen. Wird bei Bedarf nachgereicht.
Meine Empfehlung:
- Schau Dir bitte erst mal so an, was passieren würde, wenn Deine Anforderung wortwörtlich batchmäßig umgesetzt werden würde.
[Anmerkung: "Batch" hat die gleiche sprachliche Wurzel wie das süddeutsche "Batschkopp" - der führt halt alles aus, was Du ihm sagst.]
- oder wende den obigen Befehl selektiv auf einzelne Verzeichnisse an, wo Du Dir ganz sicher bist, dass dort nur Daten (und keine Programme mit angelegten Verzeichnisstrukturen vorhanden sind
Beispiel: "for /d %i in (D:\unkritisches\Subdir\*.*) do ...."

Gruss
Biber
[Edit] Upps. Moin bastla.... Du tippst einfach schneller als ich...face-wink [/Edit]
Mitglied: 44227
44227 Feb 26, 2007 at 06:12:47 (UTC)
Goto Top
Moin Bastla, moin Biber,

erstmal vielen Dank für dei schnellen Antworten.

Ich werde es heute ausprobieren und geben dann rückmeldung.

Viele Grüße,
Nermin