powdi79
Goto Top

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

Content-Key: 196630

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

Printed on: April 24, 2024 at 12:04 o'clock

Member: colinardo
colinardo Jan 08, 2013 updated at 18:31:45 (UTC)
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
Member: powdi79
powdi79 Jan 09, 2013 at 07:02:13 (UTC)
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
Member: colinardo
colinardo Jan 09, 2013 updated at 09:57:46 (UTC)
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
Member: powdi79
powdi79 Jan 09, 2013 at 11:43:48 (UTC)
Goto Top
Super! Hat prima geklappt. Besten Dank!

Gruss