dh0815
Goto Top

In einer Batch-Datei einen variablen Teil eines Dateinamens auslesen

Hallo Leute,

das ist mein erster Post hier und ich möchte mich vorab schon dafür entschuldigen, wenn ich etwas falsch mache und bin für konstruktive Kritik und Tipps, die helfen meine Posts zu verbessern, dankbar.
Nun zu meiner Frage:
ich möchte wie im Titel schon beschrieben einen variablen Teil aus einem Dateinamen auslesen und in eine weitere Variable schreiben. In dem speziellen Fall möchte ich das Jahr aus dem Dateinamen "extrahieren" und in eine separate Variable schreiben.
Ich weiß aus einer vorherigen Abfrage, wie der Dateiname lautet und habe diesen in der Variable %filename% gespeichert.
Außerdem weiß ich durch vorangegangene Abfragen, welchen Zeichen ich "auslesen" muss.
Der Einfachkeithalber setze ich diese Variablen hier mal fest, also Filename, die Postion des Jahres und die Anzahl der Zeichen, die das Jahr hat.
Danach versuche ich mit
set year=%filename:~7,4%
die 4 Zeichen rechts von der 7 Stelle in die Variable %year% zu schreiben, nur dass 7 und 4 eben auch Variablen sind.

Hier mein versuch, aber irgendwie läuft das nicht, ich vermute mal, dass das irgendwie mit den % zusammenhängt und habe da auch schon mehrere Varianten versucht...
set filename=03_MOV_20171224_121230.avi
set pos_year=7
set number_year=4
set year=%filename:~%pos_year%,%number_year%%

Evtl. kann mir ja einer weiterhelfen.

Vielen Dank schon Mal

LG Daniel

Content-ID: 345285

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

Nerofu
Nerofu 03.08.2017 um 10:00:30 Uhr
Goto Top
Hast du schon versucht nicht direkt auszulesen sondern die Variable zu Kürzen und dann den rest in eine Variable zu schreiben?
133883
Lösung 133883 03.08.2017 aktualisiert um 10:23:12 Uhr
Goto Top
Mit delayedExpansion
setlocal enabledelayedexpansion
set "filename=03_MOV_20171224_121230.avi"  
set pos_year=7
set number_year=4
set year=!filename:~%pos_year%,%number_year%!
Oder auch mit Call Set möglich.
set "filename=03_MOV_20171224_121230.avi"  
set pos_year=7
set number_year=4
call set year=%filename:~%pos_year%,%number_year%%
Würde aber lieber gleich zu Powershell und Regex greifen.

Gruß
dh0815
dh0815 03.08.2017 um 10:13:01 Uhr
Goto Top
Hallo exguru,

mit Call Set kam ich nicht weiter, aber mit delayedExpansion funktioniert es. Vielen Dank...

Daniel
dh0815
dh0815 03.08.2017 um 10:14:16 Uhr
Goto Top
Hallo Nerofu,

Das hatte ich noch nicht versucht, wäre in jedem Fall ein interessanter Lösungsansatz. Jedoch hat mir der Post von exguru schon die Lösung gebracht.

Aber Danke für deine Antwort

Daniel
Nerofu
Nerofu 03.08.2017 um 10:16:22 Uhr
Goto Top
Zitat von @dh0815:

Hallo Nerofu,

Das hatte ich noch nicht versucht, wäre in jedem Fall ein interessanter Lösungsansatz. Jedoch hat mir der Post von exguru schon die Lösung gebracht.

Aber Danke für deine Antwort

Daniel
Die Lösung ist auch besser face-smile

MFG,
Nero