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
Nun möchte ich alle Dateien, die enthalten sind, in den jeweiligen ersten Unterordner verschieben:
Ich habe nun stundenlang gesucht und herumprobiert, jedoch wirklich keine Lösung gefunden.
Mein letzter Versuch war:
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?
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?
Please also mark the comments that contributed to the solution of the article
Content-Key: 4959639621
Url: https://administrator.de/contentid/4959639621
Printed on: June 16, 2024 at 05:06 o'clock
4 Comments
Latest comment
Batch
PS
@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"
)
$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
}
Moin,
Noch ein kurzer Hinweis, bei dem ich aber nicht weiß ob er relevant ist:
Gruß
Doskias
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 WOW. Vielen Lieben Dank für die Unterstützung. Ich habe bereits diese Antwort als Lösung markiert.
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