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-Key: 345285

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

Printed on: April 23, 2024 at 18:04 o'clock

Member: Nerofu
Nerofu Aug 03, 2017 at 08:00:30 (UTC)
Goto Top
Hast du schon versucht nicht direkt auszulesen sondern die Variable zu Kürzen und dann den rest in eine Variable zu schreiben?
Mitglied: 133883
Solution 133883 Aug 03, 2017 updated at 08:23:12 (UTC)
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ß
Member: dh0815
dh0815 Aug 03, 2017 at 08:13:01 (UTC)
Goto Top
Hallo exguru,

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

Daniel
Member: dh0815
dh0815 Aug 03, 2017 at 08:14:16 (UTC)
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
Member: Nerofu
Nerofu Aug 03, 2017 at 08:16:22 (UTC)
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