Ordnernamen mit String aus Ziffern-Zahlenkombination erstellen
Hallo zusammen,
ich habe ein etwas komplexeres Problem, welches ich selbst mittels einer Batch-Datei lösen will / muss, da mein Softwareliefertant dies nicht machen kann ( ...will...).
Ich habe einen Ordner ( C:\ElRech1 ) in welchen fortlaufend xml-Dateien eingespeichert werden. Diese haben außer der Endung *.xml alle eines gemeinsam: irgendwo im Namen der xml stehen Buchstaben. Die Ziffern vor dem "-" rückwärts bis zum nächsten "-" davor sind gesucht.
Beispiel:
02-419892-0-1980-ZE-783-1-0.xml ....hier wird dann die Ziffernkombination 1980 benötigt
oder aber auch
02-419892-0-8965-KBR-71-1-0.xml ..... dementsprechend hier die 8965.
Die Buchstabenkombination ist nicht willkürlich sondern derzeit nur ZE oder KBR ...das kann aber irgendwann auch noch mehr werden . es könnte also hilfreich sein, die möglichen Buchstabenkombination vorab zu definieren
Wenn in dem ursprünglichen Verzeichnis C:\ElRech1 eine neue xml eingespeichert wird, soll im ebenfalls vorhandenen Ordner C:\ElRech2 ein Unterordner mit dem Namen der gefundenen Ziffernkombination erstellt werden ( ...also beim ersten Beispiel : C:\ElRech2\1980 ) ...ist dieser Unterordner bereits vorhanden, dann eine kurze Meldung mit der Option "OK" oder "Cancel". In diesen Unterordner soll dann die xml, einkopiert werden, die den Namen des Ordners definiert hat .
Ergebnis: C:\ElRech2\1980\02-419892-0-1980-ZE-783-1-0.xml
Zu komplex ???
Danke im Voraus für alle Antworten --- auch wenn so nicht lösbar .
Gruß Markus
ich habe ein etwas komplexeres Problem, welches ich selbst mittels einer Batch-Datei lösen will / muss, da mein Softwareliefertant dies nicht machen kann ( ...will...).
Ich habe einen Ordner ( C:\ElRech1 ) in welchen fortlaufend xml-Dateien eingespeichert werden. Diese haben außer der Endung *.xml alle eines gemeinsam: irgendwo im Namen der xml stehen Buchstaben. Die Ziffern vor dem "-" rückwärts bis zum nächsten "-" davor sind gesucht.
Beispiel:
02-419892-0-1980-ZE-783-1-0.xml ....hier wird dann die Ziffernkombination 1980 benötigt
oder aber auch
02-419892-0-8965-KBR-71-1-0.xml ..... dementsprechend hier die 8965.
Die Buchstabenkombination ist nicht willkürlich sondern derzeit nur ZE oder KBR ...das kann aber irgendwann auch noch mehr werden . es könnte also hilfreich sein, die möglichen Buchstabenkombination vorab zu definieren
Wenn in dem ursprünglichen Verzeichnis C:\ElRech1 eine neue xml eingespeichert wird, soll im ebenfalls vorhandenen Ordner C:\ElRech2 ein Unterordner mit dem Namen der gefundenen Ziffernkombination erstellt werden ( ...also beim ersten Beispiel : C:\ElRech2\1980 ) ...ist dieser Unterordner bereits vorhanden, dann eine kurze Meldung mit der Option "OK" oder "Cancel". In diesen Unterordner soll dann die xml, einkopiert werden, die den Namen des Ordners definiert hat .
Ergebnis: C:\ElRech2\1980\02-419892-0-1980-ZE-783-1-0.xml
Zu komplex ???
Danke im Voraus für alle Antworten --- auch wenn so nicht lösbar .
Gruß Markus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 392557
Url: https://administrator.de/forum/ordnernamen-mit-string-aus-ziffern-zahlenkombination-erstellen-392557.html
Ausgedruckt am: 19.02.2025 um 22:02 Uhr
16 Kommentare
Neuester Kommentar
Zitat von @MmarKuss:
Danke Kraemer .... blöd nur, wenn man nur über Halbwissen verfügt --- wie ich zum Beispiel...
Bei welcher Hälfte kommst du denn nicht weiter?Danke Kraemer .... blöd nur, wenn man nur über Halbwissen verfügt --- wie ich zum Beispiel...

I would do this with a more modern scripting language like powershell but if you really need plain oldschool batch, here you go:
Best regards.
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "folder=C:\ELRech2"
set markers=ZE KBR
for %%a in ("%folder%\*.xml") do (
set "name=%%~na"
for %%b in (%markers%) do set "name=!name:-%%b=#!"
for /f "tokens=1 delims=#" %%b in ("!name!") do (set "part=%%b" & set "num=!part:~-4!")
if not exist "%folder%\!num!" md "%folder%\!num!" >nul
echo Moving '%%a' to '%folder%\!num!' ...
move "%%a" "%folder%\!num!"
)
Zitat von @erikro:
Hast du das jetzt mit Absicht so verkompliziert, oder machst du das immer so?([regex]"[0-9]+").match(([regex]"[0-9]+-{1}[A-Z]+").match("$filename").value).value

Zitat von @erikro:
Das ist doch nicht kompliziert.
Zwei ganz einfache ineinander verschachtelte Regexe.
Why two regexes? One is totally enough. Das ist doch nicht kompliziert.
In addition to the Batch variant above, here you go with the Powershell variant.
$folder = 'C:\ELRech2'
dir $folder -Filter *.xml | ?{!$_.PSIsContainer -and $_-Basename -match '-(\d+)-[a-z]+'} | %{
$dest = "$folder\$($matches[1])"
if(!(Test-Path $dest)){md $dest | out-null}
$_ | move-item -Destination $dest -Force -Verbose
}
Zitat von @137808:

Zitat von @erikro:
Das ist doch nicht kompliziert.
Zwei ganz einfache ineinander verschachtelte Regexe.
Why two regexes? One is totally enough. Das ist doch nicht kompliziert.
I love one liners.

But your nested thing actually doesn't simplify things, it has a lot of overhead, don't stress your cpu with an additional unneeded regex execution 
[regex]::match('307401-4506-ZE-3-52-1.xml','(?i)-(\d+)-[a-z]+').Groups[1].Value