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-Key: 4959639621

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

Printed on: June 16, 2024 at 05:06 o'clock

Member: Doskias
Doskias Dec 14, 2022 at 14:58:27 (UTC)
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
Mitglied: 4863114660
Solution 4863114660 Dec 15, 2022 updated at 07:12:31 (UTC)
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
}
Member: subfolder
subfolder Dec 15, 2022 at 08:15:18 (UTC)
Goto Top
WOW. Vielen Lieben Dank für die Unterstützung. Ich habe bereits diese Antwort als Lösung markiert.

Nochmals Dankeschön!
Member: Doskias
Doskias Dec 15, 2022 at 08:21:31 (UTC)
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