bytekrieger

Rekursive Sortierung per Dateityp mit einem batchscript

Ich bräuchte mal eure Hilfe. Ich würde mir gerne ein Batch Script basteln welches folgendermaßen funktionieren sollte.

Schritt 1 Abfrage Pfad der Quelle zb D:\Quelle
Schritt 2 Abfrage Pfad des Ziels zb D:\Ziel
Schritt 3 Abfrage der zu sortierenden Dateiendungen zb .jpg .doc .docx etc.

Schritt 4
Dann Hinweis Zeile mit Echo was das Ding eigentlich vorhat zu tun.

Schritt 5 (Ist nun das Problem da ich da nicht weiß wie ich, das machen würde.)

Passieren sollte
Alles innerhalb D:\Quelle wird durchsucht und nach Dateityp in verschiedene Unterordner abgelegt innerhalb von D:\Ziel
das heißt es wird automatisch z. B. der Ordner D:\Ziel\tiff erstellt, sobald die erste tiff Datei gefunden wurde
(es sollte unabhängig von der Groß -kleinschreibung funktionieren z. B. TIFF,Tiff,tiff)
danach soll die Datei verschoben werden und mit "00000001_Originalname" fortlaufend durchnummeriert werden. Um Daten mit selbigen Namen in anderem Verzeichnis auch kopieren zu können.

Was habt ihr so für Ideen? Bzw. könnt mir Denkanstöße geben wie ich selbst auf die Lösung komme?
Würde mich über Antworten freuen.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 1148210863

Url: https://administrator.de/forum/rekursive-sortierung-per-dateityp-mit-einem-batchscript-1148210863.html

Ausgedruckt am: 06.06.2025 um 14:06 Uhr

149062
149062 12.08.2021 aktualisiert um 15:15:23 Uhr
Goto Top
Heutzutage macht man das unter Winblows gleich mit der Powershell
$source = read-host "Quellordner angeben"  
$destination = read-host "Zielordner angeben"  
$extensions = '*.tiff','*.tif','*.jpg'  
if (!(Test-Path $quelle)){
    write-error "Quellpfad existiert nicht!"  
    exit 1
}
if (!(Test-Path $source)){md $destination -Force | out-null}
$filegroups = Get-ChildItem $source -Include $extensions -Recurse | group Extension
foreach ($group in $filegroups){
    $target = (md "$destination\$(($group.Name -replace '^\.'))" -Force).FullName  
    $group.Group | %{$cnt=0}{
        move-item $_.Fullname -Destination "$target\$('{0:D8}' -f ++$cnt)_$($_.Name)" -whatif  
    }
}
Mehr Input dazu
Musterlösungen: Dateien verschieben abhängig vom Teil des Dateinamens

Wenn es trotz allem doch ein Batch sein muss, probier mal das
@echo off &setlocal enabledelayedexpansion
:start
set /p "source=Quellordner angeben:"  
set /p "destination=Zielordner angeben:"  
set "extensions=tiff tif jpg"  
if not exist "%source%" (  
	echo "Quellpfad existiert nicht. Eingabe wiederholen."  
	goto :start
)

for /f "delims=" %%a in ('dir /b /s /a-d "%source%\*" 2^>^&1 ^|findstr /ie "%extensions%"') do (  
	set "ext=%%~xa"  
	set "ext=!ext:~1!"  
	set "cnt="  
	if not exist "%destination%\!ext!" (  
		md "%destination%\!ext!" >nul  
		set cnt=1
	) else (
		for /f "tokens=1 delims=_" %%b in ('dir /b /s /a-d "%destination%\!ext!\*.*" 2^>^&1') do for /f "tokens=1 delims=0" %%c in ("%%~nb") do set "cnt=%%c"  
		if not defined cnt (set cnt=1) else (set /a cnt+=1)
	)
	set "cnt=0000000!cnt!"  
	copy "%%a" "%destination%\!ext!\!cnt:~-8!_%%~nxa"  
)