BATCH Dateinamen auslesen und an variabler Stelle x Zeichen auschneiden und am Ende wieder einfügen
Ich habe folgendes Problem.
Ich möchte Dateinamen um einen bestimmten Teil ändern damit ich diese sortieren kann.
Ist Zustand (ca. 250 Files in einem Ordner):
Formieren2_22052015Z0501.xlsx
Formieren1_11072014Z0408.xlsx
Vorladen_15092015Z0408.xlsx
Vorladen_15092015Z0501.xlsx
Soll Zustand:
Formieren2_Z0501_22052015.xlsx
Formieren1_Z0408_11072014.xlsx
Vorladen_Z0408_15092015.xlsx
Vorladen_Z0501_15092015.xlsx
Beschreibung:
Es soll nach folgendem Zeichen "_" die nächsten 8 Zeichen (Datum) ausgeschnitten werden und am Ende eingefügt werden, zudem soll für eine bessere Übersichtlichkeit vor das Datum noch ein "_" eingesetzt werden (siehe Soll Zustand)
Ich hoffe ich konnte dies einigermaßen Verständlich erklären.
Lösen möchte ich das nur per skript -> Batch , also bitte keine Tools nennen.
Ich bedanke mich schonmal im Voraus für eure Hilfe ohne dieser ich aufgeschmissen wäre
Ich möchte Dateinamen um einen bestimmten Teil ändern damit ich diese sortieren kann.
Ist Zustand (ca. 250 Files in einem Ordner):
Formieren2_22052015Z0501.xlsx
Formieren1_11072014Z0408.xlsx
Vorladen_15092015Z0408.xlsx
Vorladen_15092015Z0501.xlsx
Soll Zustand:
Formieren2_Z0501_22052015.xlsx
Formieren1_Z0408_11072014.xlsx
Vorladen_Z0408_15092015.xlsx
Vorladen_Z0501_15092015.xlsx
Beschreibung:
Es soll nach folgendem Zeichen "_" die nächsten 8 Zeichen (Datum) ausgeschnitten werden und am Ende eingefügt werden, zudem soll für eine bessere Übersichtlichkeit vor das Datum noch ein "_" eingesetzt werden (siehe Soll Zustand)
Ich hoffe ich konnte dies einigermaßen Verständlich erklären.
Lösen möchte ich das nur per skript -> Batch , also bitte keine Tools nennen.
Ich bedanke mich schonmal im Voraus für eure Hilfe ohne dieser ich aufgeschmissen wäre
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 284901
Url: https://administrator.de/forum/batch-dateinamen-auslesen-und-an-variabler-stelle-x-zeichen-auschneiden-und-am-ende-wieder-einfuegen-284901.html
Ausgedruckt am: 05.04.2025 um 13:04 Uhr
6 Kommentare
Neuester Kommentar

Moin,
ungetestet z.B. so
(Skript ist zum Testen noch nicht scharf geschaltet, wenn die Ausgabe dem Gewünschten entspricht, in Zeile 8 das "echo" am Zeilenanfang entfernen)
Powershell:
Gruß jodel32
ungetestet z.B. so
(Skript ist zum Testen noch nicht scharf geschaltet, wenn die Ausgabe dem Gewünschten entspricht, in Zeile 8 das "echo" am Zeilenanfang entfernen)
@echo off & setlocal Enabledelayedexpansion
set "ordner=c:\ordner"
for %%a in ("%ordner%\*.xlsx") Do @(
for /f "tokens=1,2 delims=_" %%b in ("%%~na") do @(
set "dpart=%%c"
set "filedate=!dpart:~0,8!"
set "rest=!dpart:~8!"
echo ren "%%a" "%%b_!rest!_!filedate!%%~xa"
)
)
Powershell:
gci C:\Ordner\*.xlsx | Rename-Item -NewName {"$($_.Basename -replace '^(.*?_)(\d{8})(.*)','$1$3_$2')$($_.Extension)"} -Force

kleiner Typo, ist oben korrigiert, sorry.
Nur mal so in die Diskussion geworfen:
Warum bereitest Du den Teil, der offensichtlich ein Datum ist, nicht gleich ähnlich der ISO-Norm 8601 auf?
Heute wäre dann nicht 08102015, sondern 20151008. Auch die angelsächsische Schreibweise in der Form mmttyyy ist nicht unbedingt zielführend, wenn man chronologisch sortieren will.
Gruß, Nemo-G
Warum bereitest Du den Teil, der offensichtlich ein Datum ist, nicht gleich ähnlich der ISO-Norm 8601 auf?
Heute wäre dann nicht 08102015, sondern 20151008. Auch die angelsächsische Schreibweise in der Form mmttyyy ist nicht unbedingt zielführend, wenn man chronologisch sortieren will.
Gruß, Nemo-G

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen.