subfolder
Goto Top

BATCH dateien von sub sub-sub folder in hauptordner verschieben und löschen

Hallo,

ich habe folgendes Problem: Ich habe hier viele Ordner mit diversen Unterordnern und Dateien drin. Quasi

mainfolder\sub1\file.txt
mainfolder\sub1\file2.txt
mainfolder\sub1\file3.txt
mainfolder\sub2\file.txt
mainfolder\sub2\file2.txt
mainfolder\sub2\file3.txt
mainfolder\sub3\sub4\file.txt
mainfolder\sub3\sub4\file2.txt
mainfolder\sub3\sub4\file3.txt
mainfolder\sub3\sub4\subx\file.txt
mainfolder\sub3\sub4\subx\file2.txt
mainfolder\sub3\sub4\subx\file3.txt

Nun möchte ich alle Dateien, die enthalten sind, in den jeweiligen ersten Unterordner verschieben:

mainfolder\sub1\file.txt
mainfolder\sub1\file2.txt
mainfolder\sub1\file3.txt
mainfolder\sub2\file.txt
mainfolder\sub2\file2.txt
mainfolder\sub2\file3.txt
mainfolder\sub3\file.txt
mainfolder\sub3\file2.txt
mainfolder\sub3\file3.txt
mainfolder\sub3\file.txt
mainfolder\sub3\file2.txt
mainfolder\sub3\file3.txt


Ich habe nun stundenlang gesucht und herumprobiert, jedoch wirklich keine Lösung gefunden.

Mein letzter Versuch war:

for /f "delims=" %%i in ('dir /b /ad') do if exist "%%i\%%i\" (  
    move "%%i\%%i\*.*" "%%i"  
    rd "%%i\%%i"  
)

Das klappt dann aber nur, wenn der Unter-Unterordner gleich heisst. Sobald hier ein anderer da ist, wird das Übersprungen.

Bzw. geht das überhaupt, was ich vor habe?

Content-ID: 4959639621

Url: https://administrator.de/forum/batch-dateien-von-sub-sub-sub-folder-in-hauptordner-verschieben-und-loeschen-4959639621.html

Ausgedruckt am: 27.03.2025 um 07:03 Uhr

Doskias
Doskias 14.12.2022 um 15:58:27 Uhr
Goto Top
Moin,

wenn du schon Stundenlang herumprobierst, wie du sagst, wieso probierst du nicht mal PowerShell aus?

bzw. geht das überhaupt, was ich vor habe?
ja

Gruß
Doskias
4863114660
Lösung 4863114660 15.12.2022 aktualisiert um 08:12:31 Uhr
Goto Top
Batch
@echo off
set "root=c:\Mainfolder"  
for /d %%a in ("%root%\*") do (  
    for /f "delims=" %%b in ('dir /b /s /a-d "%%a"') do move "%%b" "%%a\" 2>nul  
    for /d %%b in ("%%a\*") do rd /s /q "%%b"  
)
PS
$root = "c:\mainfolder"  
foreach($folder in Get-ChildItem $root -Directory){
    Get-ChildItem $folder.Fullname -File -Recurse | move-item -Destination $folder.Fullname
    Get-ChildItem $folder.Fullname -Directory | remove-item -recurse -force
}
subfolder
subfolder 15.12.2022 um 09:15:18 Uhr
Goto Top
WOW. Vielen Lieben Dank für die Unterstützung. Ich habe bereits diese Antwort als Lösung markiert.

Nochmals Dankeschön!
Doskias
Doskias 15.12.2022 um 09:21:31 Uhr
Goto Top
Moin,

Zitat von @subfolder:
WOW. Vielen Lieben Dank für die Unterstützung. Ich habe bereits diese Antwort als Lösung markiert.
Unterstützung != Lösung face-wink

Noch ein kurzer Hinweis, bei dem ich aber nicht weiß ob er relevant ist:
Get-ChildItem $folder.Fullname -Directory | remove-item -recurse -force
Das ist etwas "gefährlich". Sollten aus irgendeinem Grund (zum Beispiel, weil es die Datei im Zielorder schon gibt), Dateien nicht verschoben werden können, dann löscht der Befehl den Ordner inkl. der dort liegenden Dateien. Ich persönlich würde noch über eine Prüfung nachdenken, ob der Ordner leer ist, bevor ich ihn lösche.

Gruß
Doskias