
6741
09.03.2007, aktualisiert am 18.03.2007
automatisch den Inhalt von Ordner verschiebem bzw kopieren
Hallo,
ich habe einen Ordner ( Ordner1 ) mit ca. 200 Unterordnern. In jeden Unterordner befinden sich ein weitere Ordner mit ca. 50 - 200 Dateien. Jetzt möchte ich den 2. Unterordner eine Ebene höher verschoben bekommen. So das der erste Unterordner gelöscht wird und der zweite Unterordner eine Stufe höher rückt ...
hoffe mir kann einer eine nette Batch schreiben .....
schönes WE
ich habe einen Ordner ( Ordner1 ) mit ca. 200 Unterordnern. In jeden Unterordner befinden sich ein weitere Ordner mit ca. 50 - 200 Dateien. Jetzt möchte ich den 2. Unterordner eine Ebene höher verschoben bekommen. So das der erste Unterordner gelöscht wird und der zweite Unterordner eine Stufe höher rückt ...
hoffe mir kann einer eine nette Batch schreiben .....
schönes WE
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 53703
Url: https://administrator.de/forum/automatisch-den-inhalt-von-ordner-verschiebem-bzw-kopieren-53703.html
Ausgedruckt am: 23.04.2025 um 02:04 Uhr
15 Kommentare
Neuester Kommentar
Hallo firewalldevil!
Wie immer bei derartigen Aktionen stellt sich eine wichtige Frage: Sind Kollisionen von Unter-Unterordnernamen zu erwarten, und wie ist damit umzugehen?
Zur Erläuterung folgende beispielhafte Struktur:
Wenn nach Deinem Wunsch alle Test-Ordner zu Unterordnern von Ordner1 werden sollen, was soll mit Test4 aus Unterordner2 passieren?
Man könnte natürlich einfach alle enthaltenen Dateien in den dann schon existierenden Ordner Ordner1\Test4 (der aus Unterordner1 nach oben verschoben wurde) verschieben - nur würde sich dann die nächste Frage stellen: Was tun mit den beiden gleichnamigen Datei3.txt?
Wenn Du natürlich ausschließen kannst, dass es gleichnamige Unter-Unterordner geben kann, sind gleichnamige Dateien kein Problem ...
Noch eine andere Frage: Sind auch noch Unter-Unter-Unterordner zu berücksichtigen?
Grüße
bastla
Wie immer bei derartigen Aktionen stellt sich eine wichtige Frage: Sind Kollisionen von Unter-Unterordnernamen zu erwarten, und wie ist damit umzugehen?
Zur Erläuterung folgende beispielhafte Struktur:
Ordner1
Unterordner1
Test1
Test3
Test4
Datei1.txt
Datei3.txt
Unterordner2
Test2
Test4
Datei2.txt
Datei3.txt
Man könnte natürlich einfach alle enthaltenen Dateien in den dann schon existierenden Ordner Ordner1\Test4 (der aus Unterordner1 nach oben verschoben wurde) verschieben - nur würde sich dann die nächste Frage stellen: Was tun mit den beiden gleichnamigen Datei3.txt?
Wenn Du natürlich ausschließen kannst, dass es gleichnamige Unter-Unterordner geben kann, sind gleichnamige Dateien kein Problem ...
Noch eine andere Frage: Sind auch noch Unter-Unter-Unterordner zu berücksichtigen?
Grüße
bastla
Hmmm, fwd,
ich bin nicht ganz sicher, ob ich die ganze Aktion richtig verstehe... ich frag lieber noch mal nach...
Ich habe eine Beispielstruktur angelegt, die ich mit zwei FOR /D-Anweisungen durchgehen könnte.
Die Zählvariablen nenne ich %e für die erste, %z für die zweite Ebene.
Jetzt etwas ernsthafter:
Ergebnis:
- die Ordner der Unterebenen sind in die neue Ebene "Root" verschoben worden.
- aber die Verzeichnisse einsA, einsB, einsC und einsD konnten nicht gelöscht werden, da dort noch Dateien liegen (blaeinsA.txt etc).
Was sollte denn mit solchen Dateien passieren, falls vorhanden? Wo gehören die denn hin?
Gruss
Biber
ich bin nicht ganz sicher, ob ich die ganze Aktion richtig verstehe... ich frag lieber noch mal nach...
Ich habe eine Beispielstruktur angelegt, die ich mit zwei FOR /D-Anweisungen durchgehen könnte.
$cmd$dir /b /s Root
Z:\>
$cmd$dir /b /s root
Z:\root\einsA
Z:\root\einsb
Z:\root\einsc
Z:\root\einsd
Z:\root\einsA\zweiAA
Z:\root\einsA\zweiBB
Z:\root\einsA\zweiCC
Z:\root\einsA\zweiDD
Z:\root\einsA\blaeinsA.txt
Z:\root\einsb\zweiNN
Z:\root\einsb\zweiMM
Z:\root\einsb\zweiOO
Z:\root\einsb\blaeinsb.txt
Z:\root\einsb\zweiOO\drei333
Z:\root\einsb\zweiOO\drei334
Z:\root\einsb\zweiOO\drei335
Z:\root\einsb\zweiOO\drei335\vier444
Z:\root\einsb\zweiOO\drei335\vier445
Z:\root\einsb\zweiOO\drei335\vier446
Z:\root\einsc\blaeinsc.txt
Z:\root\einsd\zweiXX
Z:\root\einsd\zweiYY
Z:\root\einsd\zweiZZ
Z:\root\einsd\zweiFF
Z:\root\einsd\zweiGG
Z:\root\einsd\zweiHH
Z:\root\einsd\blaeinsd.txt
---- einmal Simulation mit "ECHO"
$cmd$for /D %e in (\Root\*.*) do @(for /d %z in (%e\*.*) do @echo move "%z" "%~dpe") && echo rd "%e"
move "\Root\einsA\zweiAA" "Z:\Root\"
move "\Root\einsA\zweiBB" "Z:\Root\"
move "\Root\einsA\zweiCC" "Z:\Root\"
move "\Root\einsA\zweiDD" "Z:\Root\"
rd "\Root\einsA"
move "\Root\einsb\zweiNN" "Z:\Root\"
move "\Root\einsb\zweiMM" "Z:\Root\"
move "\Root\einsb\zweiOO" "Z:\Root\"
rd "\Root\einsb"
move "\Root\einsd\zweiXX" "Z:\Root\"
move "\Root\einsd\zweiYY" "Z:\Root\"
move "\Root\einsd\zweiZZ" "Z:\Root\"
move "\Root\einsd\zweiFF" "Z:\Root\"
move "\Root\einsd\zweiGG" "Z:\Root\"
move "\Root\einsd\zweiHH" "Z:\Root\"
rd "\Root\einsd"
$cmd$for /D %e in (\Root\*.*) do @(for /d %z in (%e\*.*) do @move "%z" "%~dpe">nul) && rd "%e" 2>nul
$cmd$for /D %e in (\Root\*.*) do @(for /d %z in (%e\*.*) do @move "%z" "%~dpe">nul) && rd "%e" 2>nul
$cmd$dir /s /b root
Z:\root\einsA
Z:\root\einsb
Z:\root\einsc
Z:\root\einsd
Z:\root\zweiHH
Z:\root\zweiAA
Z:\root\zweiBB
Z:\root\zweiCC
Z:\root\zweiDD
Z:\root\zweiNN
Z:\root\zweiMM
Z:\root\zweiXX
Z:\root\zweiYY
Z:\root\zweiZZ
Z:\root\zweiFF
Z:\root\zweiGG
Z:\root\drei333
Z:\root\drei334
Z:\root\vier444
Z:\root\vier445
Z:\root\vier446
Z:\root\einsA\blaeinsA.txt
Z:\root\einsb\blaeinsb.txt
Z:\root\einsc\blaeinsc.txt
Z:\root\einsd\blaeinsd.txt
Ergebnis:
- die Ordner der Unterebenen sind in die neue Ebene "Root" verschoben worden.
- aber die Verzeichnisse einsA, einsB, einsC und einsD konnten nicht gelöscht werden, da dort noch Dateien liegen (blaeinsA.txt etc).
Was sollte denn mit solchen Dateien passieren, falls vorhanden? Wo gehören die denn hin?
Gruss
Biber
Moin fwd,
dann sollte das doppelte FOR/D-Schleifchen oben ja passen.
Du musst nur statt ...(\Root\*.*)... in meinem Beispiel bei dir schreiben: ....(\\daten\ordner?)...
Probier es doch mal vom CMD-Prompt mit der Simulations-Variante (die mit den "Echo"s).
Gruss
Biber
dann sollte das doppelte FOR/D-Schleifchen oben ja passen.
Du musst nur statt ...(\Root\*.*)... in meinem Beispiel bei dir schreiben: ....(\\daten\ordner?)...
Probier es doch mal vom CMD-Prompt mit der Simulations-Variante (die mit den "Echo"s).
for /D %e in (\\Daten\Ordner*.*) do @(for /d %z in (%e\*.*) do @echo move "%z" "%~dpe") && echo rd "%e"
Wie sieht denn dann das Ergebnis aus?Gruss
Biber
Moin, fwd,
dann reden wir noch ein ganz klein bissi aneinander vorbei.
Meine Zeile tut folgendes:
Bitte mal mal das auf, was bei Dir bei dem "dir d:\daten1 /b /s" herauskommen soll.
Offensichtlich habe ich die Unter/Verschiebe-Ebenen anders verstanden als Du gemeint hattest.
Gruss
Biber
dann reden wir noch ein ganz klein bissi aneinander vorbei.
Meine Zeile tut folgendes:
(=18:56:10 F:\=)
><b>dir d:\daten1 /b /s</b>
d:\daten1\daten2
d:\daten1\daten2\ordner1
d:\daten1\daten2\ordner1\ordner2
(=18:56:20 F:\=)
><b>for /D %e in (d:\Daten1\*) do @(for /d %z in (%e\*.*) do @move "%z" "%~dpe") && rd "%e"</b>
(=18:56:32 F:\=)
><b>dir d:\daten1 /b /s</b>
d:\daten1\ordner1
d:\daten1\ordner1\ordner2
Bitte mal mal das auf, was bei Dir bei dem "dir d:\daten1 /b /s" herauskommen soll.
Offensichtlich habe ich die Unter/Verschiebe-Ebenen anders verstanden als Du gemeint hattest.
Gruss
Biber
Hallo firewalldevil!
Nur so eine Frage: Sagt die "DOS-Box" vielleicht auch, dass die Ordner trotz der irritierenden Meldungen verschoben wurden?
Wie auch immer, versuch es vielleicht damit:
Aufruf (wenn als "C:\Scripts\LiftFolders.bat") gespeichert:
@Biber
Nach meinen Versuchen mit dem Schalter "/D" scheint es so, als würden die nach oben verschobenen Ordner ein weiteres Mal behandelt (seltsam genug), wobei dies, wenn der Name dieser Ordner Leerzeichen enthält, für jeden Namensbestandteil einzeln versucht wird - also Verschieben klappt, aber danach die ganzen Fehlermeldungen "Das System kann die angegebene Datei nicht finden." ...
Schönes WE
bastla
Nur so eine Frage: Sagt die "DOS-Box" vielleicht auch, dass die Ordner trotz der irritierenden Meldungen verschoben wurden?
Wie auch immer, versuch es vielleicht damit:
@echo off
for /f "delims=" %%e in ('dir "%~1" /b /ad') do (
for /f "delims=" %%z in ('dir /b /ad "%~1\%%e"') do move "%~1\%%e\%%z" "%~1"
rd "%~1\%%e" 2>nul
)
C:\Scripts\LiftFolders.bat "D:\Daten1\Daten2"
Nach meinen Versuchen mit dem Schalter "/D" scheint es so, als würden die nach oben verschobenen Ordner ein weiteres Mal behandelt (seltsam genug), wobei dies, wenn der Name dieser Ordner Leerzeichen enthält, für jeden Namensbestandteil einzeln versucht wird - also Verschieben klappt, aber danach die ganzen Fehlermeldungen "Das System kann die angegebene Datei nicht finden." ...
Schönes WE
bastla
Hallo firewalldevil!
Das Script ist etwas allgemeiner gehalten und erwartet den zu bearbeitenden Ordner als Argument beim Aufruf - also musst Du es, wie oben beschrieben, starten mit:
Um es gegen einen Aufruf ohne Argument abzusichern, könntest Du noch folgende Zeile nach "@echo off" einfügen:
Grüße
bastla
Das Script ist etwas allgemeiner gehalten und erwartet den zu bearbeitenden Ordner als Argument beim Aufruf - also musst Du es, wie oben beschrieben, starten mit:
C:\Scripts\LiftFolders.bat <b>"D:\Daten1\Daten2"</b>
if [%1]== echo Bitte Startordner beim Aufruf angeben! & goto :eof
Grüße
bastla
Hallo firewalldevil!
Vielleicht ist es Dir so sympathischer:
Jetzt kannst Du wieder durch einfachen Aufruf der Batch-Datei starten.
Grüße
bastla
Vielleicht ist es Dir so sympathischer:
@echo off
set "Ordner=D:\Daten1\Daten2"
for /f "delims=" %%e in ('dir "%Ordner%" /b /ad') do (
for /f "delims=" %%z in ('dir /b /ad "%Ordner%\%%e"') do move "%Ordner%\%%e\%%z" "%Ordner%"
rd "%Ordner%\%%e" 2>nul
)
Grüße
bastla