bilsebub389

Per Batch Dateien in einem Ordner und Unterordner aufteilen

Hallo zusammen,

ich bin neu hier und hätte zu Beginn gleich mal eine Frage, da ich Hilfe benötige.
Ich habe einen Ordner, worunter sich weitere Ordner befinden. Diese Ordner beinhalten Tif-, Text- und XML-Dateien. Zu jeder Tif-Datei gehört eine Text- und eine XML-Datei. Das erkennt man am gleichbleibenden Dateinamen. Beispiel: a.tif, a.txt, a.xml, b.tif, b.txt, b.xml, usw...

In diesen Ordnern befinden sich die oben beschriebenen Dokumente. Zudem kann es aber auch sein, dass es weitere Unterordner gibt, die selbiges beinhalten, also wieder Tif-Dateien mit zugehörigen Text- und XML-Dateien.

Die Struktur ist beispielsweise so:

Hauptordner -> Ordner1 -> UnterordnerVonOrdner1 -> tif, txt, xml ....
-> tif, txt, xml ...
-> Ordner2 -> tif, txt, xml ...
-> Ordner3 -> UnterordnerVonOrdner3 -> tif, txt, xml ....
-> tif, txt, xml ...

Ich möchte nun diese Datenmenge aber aufteilen. Am besten im Verhältnis 70/30. Also 30% der Dokumente in diesen Ordnern sollen genau in derselben Struktur in einen anderen Ordner "ausgelagert" werden. Beispielsweise in einen Ordner namens Hauptordner2.

Könnt Ihr mir hierbei behilflich sein?
Vielen Dank vorab!
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 764933439

Url: https://administrator.de/forum/per-batch-dateien-in-einem-ordner-und-unterordner-aufteilen-764933439.html

Ausgedruckt am: 16.07.2025 um 19:07 Uhr

PeterPanter
PeterPanter 22.06.2021 um 11:56:02 Uhr
Moin und Hallo,
dann nimm doch einfach einen oder mehrereOrdner (z.B. "Ordner3"), der/die ungefähr 30% deiner Datenmenge ausmachen und verschieb die in "Hauptordner2". Fertig... Oder habe ich was nicht verstanden?
/pp
bilsebub389
bilsebub389 22.06.2021 um 14:07:16 Uhr
Moin,
ja ich habe das wohl noch nicht ausführlich erklärt. Die erste Ordnerebene beinhaltet ca. 200 Ordner, also in meinem obigen Beispiel die Ebene "Ordner1", "Ordner2", etc.
Diese Ordner beinhalten dann eben ca. 210 Dokumente, bestehend aus Tif-, Text- und XML-Dateien und können zusätzlich noch weitere Ordner beinhalten, die ebenfalls Tif-, Text- und XML-Dateien beinhalten können. Mehr Ordnerebenen gibt es also nicht. Maximal 2. Das geht leider nicht "gschwind" mit Kopieren etc.
Vielleicht hat jemand ja eine Idee, wie ich das mit Batch lösen kann.
Vielen Dank.
PeterPanter
PeterPanter 22.06.2021 um 15:00:31 Uhr
Hmmmm.... Es sind also alle 200 Ordner in Ebene1 etwa gleich groß? Ich würde dann aus der Ebene1 die "Ordner001" bis "Ordner060" im Explorer packen und aus "Hauptordner1" in "Hauptordner2" schieben. Dauert 2 Sekunden. (Das Verschieben an sich dauert natürlich länger, je nach Datenmenge, Festplatte, Netzwerk...)
PeterPanter
PeterPanter 22.06.2021 um 15:06:05 Uhr
Wie man Odnergrößen ermitteln kann hat Wolfgang Sommergut hier sehr gut beschrieben...

windowspro.de/script/measure-object-groesse-verzeichnissen-datei ...
bilsebub389
bilsebub389 22.06.2021 um 15:09:09 Uhr
Das geht leider so nicht. Die Dokumente, die sich im Ordner befinden, sind unterschiedlich und sollen aufgeteilt werden im Verhältnis 70/30. 30 Prozent, der sich in Hauptordner1 befindlichen Dokumente sollen in genauer derselben Struktur in einen neuen Ordner Hauptordner2 verschoben werden.
colinardo
colinardo 22.06.2021, aktualisiert am 23.06.2021 um 10:19:12 Uhr
Servus,
würde ich gleich heutzutage gleich per Powershell abfackeln
$hauptordner1 = 'D:\Hauptordner1'  
$hauptordner2 = 'D:\Hauptordner2'  
$groups = ls $hauptordner1 -File -Recurse -Force | group Basename
$groups | select -Last ([int]($groups.Count * 0.3)) | %{
    $target = [System.IO.DirectoryInfo]($_.Group.DirectoryName -replace [regex]::Escape($hauptordner1),$hauptordner2)
    $target.Create()
    $_.Group | move-item -Destination $target -Verbose
}
Prüfe mal ob das deinen Anforderungen gerecht wird.

Ansonsten wenn es unbedingt sein muss geht es auch mit dem betagten Batch

@echo off &setlocal enabledelayedexpansion
set "folder1=D:\Hauptordner1"  
set "folder2=D:\Hauptordner2"  
set "cnt="  
for /f "delims=: tokens=1" %%a in ('dir /b /s /a-d "%folder1%\*.tif" ^| findstr /n .') do set /a cnt=%%a*3  
set /a cnt=(%cnt%/10)
for /f "delims=" %%a in ('dir /b /s /a-d "%folder1%\*.tif"') do (  
	if !cnt! GTR 0 (
		set "dir=%%~dpa"  
		set "targetdir=!dir:%folder1%=%folder2%!"  
		md "!targetdir!" >nul  
		copy "%%a" "!targetdir!"  
		copy "%%~dpna.xml" "!targetdir!"  
		copy "%%~dpna.txt" "!targetdir!"  
		set /a cnt-=1
	)
)
Grüße Uwe
bilsebub389
bilsebub389 23.06.2021 um 08:14:25 Uhr
Hallo Uwe,
vielen Dank für deine Antwort. Allerdings funktioniert das nicht. Wie muss ich denn das PowerShell Skript starten?
Danke.
colinardo
colinardo 23.06.2021 aktualisiert um 10:18:48 Uhr
Zitat von @bilsebub389:
vielen Dank für deine Antwort. Allerdings funktioniert das nicht.
Läuft testweise einwandfrei 😉.
Wie muss ich denn das PowerShell Skript starten?
Wenn du das schon fragen musst dann sei dir dringend folgende Lektüre empfohlen
PowerShell - Leitfaden für Anfänger

Falls du mit Powershell nicht klar kommst / per du bist, habe ich oben noch eine Batch-Variante ergänzt.

So long. Wenn's das dann war bitte auch als gelöst markieren nicht vergessen.
Grüße Uwe