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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 196630
Url: https://administrator.de/contentid/196630
Printed on: April 24, 2024 at 12:04 o'clock
4 Comments
Latest comment
Suchstring in Zeile 3 anpassen und Script in den Ordner mit den Dateien reinschmeissen
Grüße Uwe
@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
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.
Hoffe das bringt dich weiter ...
Uwe
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