Dateien automatisch anhand von 2 komplizierten Dateinamen-Strings verschieben
Hallo,
ich bräuchte eine Batch oder Batch-Powershell Kombination, die mir 1.000ende Dateien täglich anhand des Dateinamens verschiebt (einsortiert):
Ich habe 6 Quellordner in denen jeweils Dateien liegen, die in Unterordner\Unterordner verschoben werden sollen.
Die Dateinamen sind anhand folgender Logik aufgebaut:
(Beliebiger Text)_(13stellige Nr)_(13stellige Nr)_(Datum im Format JJJJMMTT)_(Beliebiger Text).txt
Beliebiger Text können Buchstaben und/oder Zahlenkombinationen und _ sein !!!
Erste Unterordner-Ebene soll das Jahr im Format JJJJ sein.
Zweite Unterordner-Ebene soll die erste 13 stellige Nr sein.
Der Zweite Unterordner muss sofern er nicht existiert erstellt werden.
Die Suche müsste also vermutlich folgender maßen aussehen:
Unterordner-Ebene 1: Suche von rechts erstes Ergebnis mit genau "_ 8 Ziffern _" und davon die ersten 4 Ziffern von links
oder
Unterordner-Ebene 1: "_ 13 Ziffern _ 13 Ziffern _" darauf folgende 4 Ziffern
Unterordner-Ebene 2: Suche von links erstes Ergebnis mit genau "_ 13 Ziffern _"
Bsp.:
Quell-Dateien:
L:\LF\Kategorie1\abcdelll_1234567890123_2345678901234_20160305_E_C17413752E.txt
L:\LF\Kategorie1\aklmdelll_4567890123456_2345678901234_20150101_AC17413752E.txt
L:\LF\Kategorie2\ttcdelll_1234567890123_2345678901234_20160101_BC3752E.txt
L:\LF\Kategorie3\fbcdelvl__1234567890123_2345678901234_20160101_17413752E.txt
L:\LF\Kategorie4\abcdelll_1234567890123_2345678901234_20160101_ZC1741112E.txt
Ziel:
L:\LF\Kategorie1\2016\1234567890123\abcdelll_1234567890123_2345678901234_20160305_E_C17413752E.txt
L:\LF\Kategorie1\2015\4567890123456\aklmdelll_4567890123456_2345678901234_20160101_AC17413752E.txt
L:\LF\Kategorie2\2016\1234567890123\ttcdelll_1234567890123_2345678901234_20160101_BC3752E.txt
L:\LF\Kategorie3\2016\1234567890123\fbcdelvl__1234567890123_2345678901234_20160101_17413752E.txt
L:\LF\Kategorie4\2016\1234567890123\abcdelll_1234567890123_2345678901234_20160101_ZC1741112E.txt
Danke und Gruß
cleverm
ich bräuchte eine Batch oder Batch-Powershell Kombination, die mir 1.000ende Dateien täglich anhand des Dateinamens verschiebt (einsortiert):
Ich habe 6 Quellordner in denen jeweils Dateien liegen, die in Unterordner\Unterordner verschoben werden sollen.
Die Dateinamen sind anhand folgender Logik aufgebaut:
(Beliebiger Text)_(13stellige Nr)_(13stellige Nr)_(Datum im Format JJJJMMTT)_(Beliebiger Text).txt
Beliebiger Text können Buchstaben und/oder Zahlenkombinationen und _ sein !!!
Erste Unterordner-Ebene soll das Jahr im Format JJJJ sein.
Zweite Unterordner-Ebene soll die erste 13 stellige Nr sein.
Der Zweite Unterordner muss sofern er nicht existiert erstellt werden.
Die Suche müsste also vermutlich folgender maßen aussehen:
Unterordner-Ebene 1: Suche von rechts erstes Ergebnis mit genau "_ 8 Ziffern _" und davon die ersten 4 Ziffern von links
oder
Unterordner-Ebene 1: "_ 13 Ziffern _ 13 Ziffern _" darauf folgende 4 Ziffern
Unterordner-Ebene 2: Suche von links erstes Ergebnis mit genau "_ 13 Ziffern _"
Bsp.:
Quell-Dateien:
L:\LF\Kategorie1\abcdelll_1234567890123_2345678901234_20160305_E_C17413752E.txt
L:\LF\Kategorie1\aklmdelll_4567890123456_2345678901234_20150101_AC17413752E.txt
L:\LF\Kategorie2\ttcdelll_1234567890123_2345678901234_20160101_BC3752E.txt
L:\LF\Kategorie3\fbcdelvl__1234567890123_2345678901234_20160101_17413752E.txt
L:\LF\Kategorie4\abcdelll_1234567890123_2345678901234_20160101_ZC1741112E.txt
Ziel:
L:\LF\Kategorie1\2016\1234567890123\abcdelll_1234567890123_2345678901234_20160305_E_C17413752E.txt
L:\LF\Kategorie1\2015\4567890123456\aklmdelll_4567890123456_2345678901234_20160101_AC17413752E.txt
L:\LF\Kategorie2\2016\1234567890123\ttcdelll_1234567890123_2345678901234_20160101_BC3752E.txt
L:\LF\Kategorie3\2016\1234567890123\fbcdelvl__1234567890123_2345678901234_20160101_17413752E.txt
L:\LF\Kategorie4\2016\1234567890123\abcdelll_1234567890123_2345678901234_20160101_ZC1741112E.txt
Danke und Gruß
cleverm
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 317160
Url: https://administrator.de/forum/dateien-automatisch-anhand-von-2-komplizierten-dateinamen-strings-verschieben-317160.html
Ausgedruckt am: 22.04.2025 um 17:04 Uhr
3 Kommentare
Neuester Kommentar
Servus @cleverm,
kein Problem, hatten wir hier schon ziemlich oft das Thema mit Skripten en masse wenn man mal die Suchfunktion bemüht hätte ... mit ein bisschen Regex kein Hexenwerk ...
Wenn die Dateien immer direkt in der obersten ebene der Kategorieordner liegen (
Grüße Uwe
kein Problem, hatten wir hier schon ziemlich oft das Thema mit Skripten en masse wenn man mal die Suchfunktion bemüht hätte ... mit ein bisschen Regex kein Hexenwerk ...
Wenn die Dateien immer direkt in der obersten ebene der Kategorieordner liegen (
L:\LF\KategorieN
) dann so:$folder = 'L:\LF\*\*'
gci $folder -Filter *.txt | ?{$_.Basename -match '^.*?_(\d{13})_\d{13}_(\d{4})'} | %{
$target = "$($_.DirectoryName)\$($matches[2])\$($matches[1])"
if (!(Test-Path $target)){md $target -Force | out-null}
move-item $_.FullName -Destination $target -Force
}
Schreib das doch gleich ...
@echo off
set "folder=L:\LF\*\*"
powershell -Executionpolicy ByPass -Command "gci '%folder%' -Filter *.txt | ?{$_.Basename -match '^.*?_(\d{13})_\d{13}_(\d{4})'} | %%{$target = $_.DirectoryName + '\' + $matches[2] + '\' + $matches[1]; if (!(Test-Path $target)){md $target -Force | out-null}; move-item $_.FullName -Destination $target -Force}"