Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

automatisch den Inhalt von Ordner verschiebem bzw kopieren

Frage Microsoft Windows Tools

Mitglied: 6741

6741 (Level 2)

09.03.2007, aktualisiert 18.03.2007, 3655 Aufrufe, 15 Kommentare

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
Mitglied: bastla
09.03.2007 um 20:36 Uhr
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:
01.
Ordner1 
02.
    Unterordner1 
03.
        Test1 
04.
        Test3 
05.
        Test4 
06.
            Datei1.txt 
07.
            Datei3.txt 
08.
    Unterordner2 
09.
        Test2 
10.
        Test4 
11.
            Datei2.txt 
12.
            Datei3.txt
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
Bitte warten ..
Mitglied: 6741
09.03.2007 um 22:21 Uhr
Hi bastla,

es gibt in dem ersten Ordner immer nur einen eindeutigen ordner, alles was im nächsten unterordner ist, soll eine Stufe höcher und der 2. unterordner kann gelöscht werden. Müsste wohl Ordner für Ordner druchgehen, da ich nicht weiß ob es dateien gibt die in der letzten ebene glecie sind. Wenn es baer Ordner für Ordner abgearbeitet wird, sollte nicht passieren.

gruß
Bitte warten ..
Mitglied: Biber
10.03.2007 um 12:53 Uhr
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.
01.
$cmd$dir /b /s Root 
02.
Z:\> 
03.
$cmd$dir /b /s root 
04.
Z:\root\einsA 
05.
Z:\root\einsb 
06.
Z:\root\einsc 
07.
Z:\root\einsd 
08.
Z:\root\einsA\zweiAA 
09.
Z:\root\einsA\zweiBB 
10.
Z:\root\einsA\zweiCC 
11.
Z:\root\einsA\zweiDD 
12.
Z:\root\einsA\blaeinsA.txt 
13.
Z:\root\einsb\zweiNN 
14.
Z:\root\einsb\zweiMM 
15.
Z:\root\einsb\zweiOO 
16.
Z:\root\einsb\blaeinsb.txt 
17.
Z:\root\einsb\zweiOO\drei333 
18.
Z:\root\einsb\zweiOO\drei334 
19.
Z:\root\einsb\zweiOO\drei335 
20.
Z:\root\einsb\zweiOO\drei335\vier444 
21.
Z:\root\einsb\zweiOO\drei335\vier445 
22.
Z:\root\einsb\zweiOO\drei335\vier446 
23.
Z:\root\einsc\blaeinsc.txt 
24.
Z:\root\einsd\zweiXX 
25.
Z:\root\einsd\zweiYY 
26.
Z:\root\einsd\zweiZZ 
27.
Z:\root\einsd\zweiFF 
28.
Z:\root\einsd\zweiGG 
29.
Z:\root\einsd\zweiHH 
30.
Z:\root\einsd\blaeinsd.txt
Die Zählvariablen nenne ich %e für die erste, %z für die zweite Ebene.
01.
---- einmal Simulation mit "ECHO" 
02.
$cmd$for /D %e in (\Root\*.*) do @(for /d %z in (%e\*.*) do @echo move "%z" "%~dpe") && echo rd "%e" 
03.
move "\Root\einsA\zweiAA" "Z:\Root\" 
04.
move "\Root\einsA\zweiBB" "Z:\Root\" 
05.
move "\Root\einsA\zweiCC" "Z:\Root\" 
06.
move "\Root\einsA\zweiDD" "Z:\Root\" 
07.
rd "\Root\einsA" 
08.
move "\Root\einsb\zweiNN" "Z:\Root\" 
09.
move "\Root\einsb\zweiMM" "Z:\Root\" 
10.
move "\Root\einsb\zweiOO" "Z:\Root\" 
11.
rd "\Root\einsb" 
12.
move "\Root\einsd\zweiXX" "Z:\Root\" 
13.
move "\Root\einsd\zweiYY" "Z:\Root\" 
14.
move "\Root\einsd\zweiZZ" "Z:\Root\" 
15.
move "\Root\einsd\zweiFF" "Z:\Root\" 
16.
move "\Root\einsd\zweiGG" "Z:\Root\" 
17.
move "\Root\einsd\zweiHH" "Z:\Root\" 
18.
rd "\Root\einsd"
Jetzt etwas ernsthafter:
01.
$cmd$for /D %e in (\Root\*.*) do @(for /d %z in (%e\*.*) do @move "%z" "%~dpe">nul) &&  rd "%e" 2>nul 
02.
$cmd$for /D %e in (\Root\*.*) do @(for /d %z in (%e\*.*) do @move "%z" "%~dpe">nul) &&  rd "%e" 2>nul 
03.
 
04.
$cmd$dir /s /b root 
05.
Z:\root\einsA 
06.
Z:\root\einsb 
07.
Z:\root\einsc 
08.
Z:\root\einsd 
09.
Z:\root\zweiHH 
10.
Z:\root\zweiAA 
11.
Z:\root\zweiBB 
12.
Z:\root\zweiCC 
13.
Z:\root\zweiDD 
14.
Z:\root\zweiNN 
15.
Z:\root\zweiMM 
16.
Z:\root\zweiXX 
17.
Z:\root\zweiYY 
18.
Z:\root\zweiZZ 
19.
Z:\root\zweiFF 
20.
Z:\root\zweiGG 
21.
Z:\root\drei333 
22.
Z:\root\drei334 
23.
Z:\root\vier444 
24.
Z:\root\vier445 
25.
Z:\root\vier446 
26.
Z:\root\einsA\blaeinsA.txt 
27.
Z:\root\einsb\blaeinsb.txt 
28.
Z:\root\einsc\blaeinsc.txt 
29.
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
Bitte warten ..
Mitglied: 6741
10.03.2007 um 13:38 Uhr
Hi Biber ...

danke das du dich der Aufgabe stellst .... ;>)

\\daten\ordner1\ordner2\*.txt
.
.
. bis ca. 200 x
.
.
\\daten\ordner1\ordner2\*.txt

Ordner2 soll auf die Höhe von Ordner1 verschoben werden , dann kann Ordner1 ( alt ) gelöscht werden.

die Ordner 1 u. 2 haben keine Ordnung bzw sind mit Buchstaben, Zahlen und erlaubt Sonderzeichen verstehen. Es gibt keine erkennbar Struktur in der Benennung.

Können also hießen z.b. [asdee]_001 oder auch asdd-zzu09, das glaube ich ist das Problem ...

gruß in WE
Bitte warten ..
Mitglied: Biber
10.03.2007 um 13:50 Uhr
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).
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
Bitte warten ..
Mitglied: 6741
15.03.2007 um 17:52 Uhr
hi biber ...

es tut sich nichts ... mmhhh ...

der Ordner heißt jetzt ...

d:\daten1\daten2\ordner1\ordner2\

also von ordner2 nach ordner 1 soll gehen ...
Bitte warten ..
Mitglied: Biber
15.03.2007 um 19:02 Uhr
Moin, fwd,

dann reden wir noch ein ganz klein bissi aneinander vorbei.

Meine Zeile tut folgendes:
01.
(=18:56:10  F:\=) 
02.
><b>dir d:\daten1 /b /s</b> 
03.
d:\daten1\daten2 
04.
d:\daten1\daten2\ordner1 
05.
d:\daten1\daten2\ordner1\ordner2 
06.
(=18:56:20  F:\=) 
07.
><b>for /D %e in (d:\Daten1\*) do @(for /d %z in (%e\*.*) do @move "%z" "%~dpe") && rd "%e"</b> 
08.
 
09.
(=18:56:32  F:\=) 
10.
><b>dir d:\daten1 /b /s</b> 
11.
d:\daten1\ordner1 
12.
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
Bitte warten ..
Mitglied: 6741
15.03.2007 um 19:31 Uhr
wie du es postetes siehts gut aus, aber ich möchte ordner2 auf die Höhe von Ordner 1 verschoben haben. Daten1 und Daten2 sind eindeutige Namen.

gruß
Bitte warten ..
Mitglied: Biber
15.03.2007 um 19:53 Uhr
Na dann ist doch noch viel weniger Aufwand...
01.
>md d:\daten1\daten2\ordner1\ordner2 
02.
>for /D %e in (d:\Daten1\daten2\*) do @(for /d %z in (%e\*.) do @move "%z" "%~dpe") 
03.
 
04.
(=19:52:04  F:\=) 
05.
>dir d:\daten1 /b /s 
06.
d:\daten1\daten2 
07.
d:\daten1\daten2\ordner1 
08.
d:\daten1\daten2\ordner2
Gruss
Biber
Bitte warten ..
Mitglied: 6741
16.03.2007 um 18:37 Uhr
hi biber,

die dos box sagt, system kann die angegebene datei nicht finden ...

also ordner1 kann 100 unterschiedliche namen haben und ordner 2 auch .. es gibt keinen zusammenhang ..

gruß ins we
Bitte warten ..
Mitglied: Biber
16.03.2007 um 18:48 Uhr
Na fwd,

das muss ich auch erstmal überschlafen - oder mal andere ranlassen.
Ich mach jetzt auch erstmal Wochenende,

Gruss
Biber
Bitte warten ..
Mitglied: bastla
16.03.2007 um 23:58 Uhr
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:
01.
@echo off 
02.
for /f "delims=" %%e in ('dir "%~1" /b /ad') do ( 
03.
	for /f "delims=" %%z in ('dir /b /ad "%~1\%%e"') do move "%~1\%%e\%%z" "%~1"  
04.
	rd "%~1\%%e" 2>nul 
05.
)
Aufruf (wenn als "C:\Scripts\LiftFolders.bat") gespeichert:
01.
C:\Scripts\LiftFolders.bat "D:\Daten1\Daten2"
@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
Bitte warten ..
Mitglied: 6741
18.03.2007 um 20:01 Uhr
hi bastla ...

das Script liegt auf c:\scritps und die Ordner auf d:\daten ...

ich erkenne nicht den Zusammenhang das das Script d:\ ansteuert ... kannst du mir bitte das Script erklären ...

Gruß und Danke
Bitte warten ..
Mitglied: bastla
18.03.2007 um 20:13 Uhr
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:
01.
C:\Scripts\LiftFolders.bat <b>"D:\Daten1\Daten2"</b>
Um es gegen einen Aufruf ohne Argument abzusichern, könntest Du noch folgende Zeile nach "@echo off" einfügen:
01.
if [%1]==[] echo Bitte Startordner beim Aufruf angeben! & goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: bastla
18.03.2007 um 20:53 Uhr
Hallo firewalldevil!

Vielleicht ist es Dir so sympathischer:
01.
@echo off 
02.
set "Ordner=D:\Daten1\Daten2" 
03.
for /f "delims=" %%e in ('dir "%Ordner%" /b /ad') do ( 
04.
    for /f "delims=" %%z in ('dir /b /ad "%Ordner%\%%e"') do move "%Ordner%\%%e\%%z" "%Ordner%"  
05.
    rd "%Ordner%\%%e" 2>nul 
06.
)
Jetzt kannst Du wieder durch einfachen Aufruf der Batch-Datei starten.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...