bilsebub389
Goto Top

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!

Content-Key: 764933439

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

Printed on: April 27, 2024 at 02:04 o'clock

Member: PeterPanter
PeterPanter Jun 22, 2021 at 09:56:02 (UTC)
Goto Top
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
Member: bilsebub389
bilsebub389 Jun 22, 2021 at 12:07:16 (UTC)
Goto Top
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.
Member: PeterPanter
PeterPanter Jun 22, 2021 at 13:00:31 (UTC)
Goto Top
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...)
Member: PeterPanter
PeterPanter Jun 22, 2021 at 13:06:05 (UTC)
Goto Top
Wie man Odnergrößen ermitteln kann hat Wolfgang Sommergut hier sehr gut beschrieben...

https://www.windowspro.de/script/measure-object-groesse-verzeichnissen-d ...
Member: bilsebub389
bilsebub389 Jun 22, 2021 at 13:09:09 (UTC)
Goto Top
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.
Member: colinardo
colinardo Jun 22, 2021, updated at Jun 23, 2021 at 08:19:12 (UTC)
Goto Top
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
Member: bilsebub389
bilsebub389 Jun 23, 2021 at 06:14:25 (UTC)
Goto Top
Hallo Uwe,
vielen Dank für deine Antwort. Allerdings funktioniert das nicht. Wie muss ich denn das PowerShell Skript starten?
Danke.
Member: colinardo
colinardo Jun 23, 2021 updated at 08:18:48 (UTC)
Goto Top
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