powdi79

Batch Ordner aus Dateinamen (erste 8 Zeichen) erstellen und Dateien verschieben

Hallo

Ich muss eine Ordnerstruktur anpassen und Dateien verschieben.

Aktuell habe ich viele Ordner, in denen jeweils ca. 100 Dateien sind. Die Dateien haben beispielsweise folgende Namen und Endungen:

XYZ12345_abe.jpg
XYZ12345_1dfdf.pdf
XYZ12345-zy.xls
XYZ55555.doc
XYZ55555_abe.ppt
abcde_1.xls
abcde.doc

Nun sollen in allen Ordnern jeweils für die Dateien mit den Dateinamen XYZ* Unterordner erstellt werden, und die entsprechenden Dateien dahin verschoben werden. Die Ordnernamen sollen dabei nur die ersten 8 Zeichen der Dateinamen sein. Das Ergebnis sollte dann folgendermassen aussehen:

XYZ12345\XYZ12345_abe.jpg
XYZ12345\XYZ12345_1dfdf.pdf
XYZ12345\XYZ12345-zy.xls
XYZ55555\XYZ55555.doc
XYZ55555\XYZ55555_abe.ppt
abcde_1.xls
abcde.doc

Die Dateien, welche nicht mit XYZ beginnen, sollen nicht verschoben werden.

In folgenden Threads habe ich bereits einige Infos gefunden:
Batch Ordner aus Dateinamen erstellen und Dateien verschieben (Sonderzeichen)
Batch Ordner mit Dateinamen erstellen und verschieben

Da ich mich jedoch mit den Textfunktionen nicht auskenne, komme ich nicht mehr weiter.

Wäre super, wenn mir da jemand helfen könnte!

Gruss
Stefan
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 196630

Url: https://administrator.de/forum/batch-ordner-aus-dateinamen-erste-8-zeichen-erstellen-und-dateien-verschieben-196630.html

Ausgedruckt am: 15.06.2025 um 09:06 Uhr

colinardo
colinardo 08.01.2013 aktualisiert um 19:31:45 Uhr
Goto Top
Suchstring in Zeile 3 anpassen und Script in den Ordner mit den Dateien reinschmeissen face-wink

@echo off
setlocal ENABLEDELAYEDEXPANSION
set suchstring=XYZ*
for /f "tokens=1 delims=" %%i IN ('dir %suchstring% /A-D /b') DO @(  
	set filename=%%i
	set SHORT=!filename:~0,8!
	if not exist "!SHORT!" (md "!SHORT!")  
	move "%%i" .\!SHORT!  
)

Grüße Uwe
powdi79
powdi79 09.01.2013 um 08:02:13 Uhr
Goto Top
Guten Morgen!

Besten Dank Uwe, hat für einen Unterordner schon mal super funktioniert!

Nun muss ich das noch für 111 Unterordner machen. Diese haben folgende Struktur:

hans\peter\*
hans\philipp\*
franz\peter_meier\*
franz\werner\*

Nicht auszuschliessen ist leider auch mit Umlauten und Leerschlag, zb:

franz\hans döner\*

Ich weiss, das sollte nicht so ein Problem sein, auch für einen Laien wie mich. Falls Ihr trotzdem gerade eine einfache Erweiterung des obigen Skript wisst, wäre ich um eine Antwort froh. Ansonsten werde ich mich entsprechend reinknien face-smile

Grüsse Stefan
colinardo
colinardo 09.01.2013 aktualisiert um 10:57:46 Uhr
Goto Top
Also wenn ich dich richtig verstanden habe dann soll z.b. die Datei XYZ12345_test.jpg im Unterordner hans\peter\ in den Ordner hans\peter\XYZ12345\XYZ12345_test.jpg verschoben werden - oder möchtest du alle neu erzeugten Ordner mit den 8 Buchstaben in einem gemeinsamen Ordner sammeln ?

Also für die erste angesprochene Variante geht folgender Code:
Du musst noch in Zeile 3 und 4 Suchstring und Startordner (Der Ordner in dem sich die Unterordner befinden) angeben.

@echo off
setlocal ENABLEDELAYEDEXPANSION
set SUCHSTRING=XYZ*
set STARTFOLDER=C:\DeinStartOrdnerOhneAnführungszeichen
cd "%STARTFOLDER%"  
for /f "tokens=1 delims=" %%F IN ('dir /b /s /AD') DO @(  
	cd "%%F"  
	call :STARTLOOP "%%F"  
)
goto :end

:STARTLOOP
cd %1
for /f "tokens=1 delims=" %%i IN ('dir %SUCHSTRING% /A-D /b') DO @(  
	set filename=%%i
	set SHORT=!filename:~0,8!
	if not exist "!SHORT!" (md "!SHORT!")  
	move "%%i" ".\!SHORT!"  
)
goto :eof

:end
exit

Hoffe das bringt dich weiter ...
Uwe
powdi79
powdi79 09.01.2013 um 12:43:48 Uhr
Goto Top
Super! Hat prima geklappt. Besten Dank!

Gruss