caspi-pirna
Goto Top

Dateinamen aus Verzeichnis Auslesen und Stringzerlegung zur Datumsanalyse

Guten Morgen.
Ich habe ein Problem mit einer Batch- Aufgabe. Es soll der Inhalt eines Verzeichnisses überprüft werden. In dem Verzeichnis sind Dateien mit Datum im Format "JJJJ.MM.TT__Dateiname" und es soll die aktuellste Datei mit dem Namen "Basis-Backup.7z" gefunden werden. Dazu habe ich den nachfolgenden Code.

del inhalt_temp.txt /s /q
pushd "inhalt_temp.txt"
for /F "tokens=1" %%a in ('dir /b /a:-d *Basis-Backup.7z') do (
	if exist %%a (
		echo %%a >> inhalt_temp.txt
		set "str=%%a"
		echo Aktuelles Datum: %str%
		set jahr=%str:~0,4%
		set monat=%str:~5,2%
		set tag=%str:~8,2%
			
		echo Tag: %tag%
		echo Monat: %monat%
		echo Jahr: %jahr%
	)		
) 

Beim Ausführen des Codes wird die For-Schleife korrekt durchlaufen und die entsprechende Datei auch gefunden (Erfüllung der If-Bedingung). Auch der Inhalt der Laufvariable &&a wird korrekt in die Datei "inhalt_temp.txt" geschrieben. Allerdings werden sämtliche set- Befehle nachfolgend ignoriert. Die Echo-Ausgaben von Tag, Monat und Jahr sind leer.

Kann mir jemand verraten, wo der Fehler liegt?
Besten Dank im Voraus!
Caspi

Content-ID: 256699

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

Ausgedruckt am: 25.11.2024 um 06:11 Uhr

colinardo
Lösung colinardo 04.12.2014 aktualisiert um 09:45:03 Uhr
Goto Top
Hallo Caspi, Willkommen auf Administrator.de!
Dir fehlt die verzögerte Variablenerweiterung wenn du Variablen innerhalb von Klammern bzw. der FOR-Schleife setzt und ausgeben möchtest.
setlocal enabledelayedexpansion

set "str=%%a"   
echo Aktuelles Datum: !str!

set jahr=!str:~0,4!
set monat=!str:~5,2!
set tag=!str:~8,2!

echo Tag: !tag!
echo Monat: !monat!
echo Jahr: !jahr!
Die Variablen müssen dann mit Ausrufezeichen anstatt Prozentzeichen umschlossen werden.

Lese am besten das oben verlinkte Tutorial zur FOR-Schleife, darin wird das noch mal ausführlich von @Friemler erläutert.

Grüße Uwe
caspi-pirna
caspi-pirna 04.12.2014 um 09:44:42 Uhr
Goto Top
Hallo Uwe,
besten Dank für den Hinweis! Das war die Lösung für das Problem!
Einen schönen Tag noch!
Grüße,
Caspi
bastla
bastla 04.12.2014 um 13:41:38 Uhr
Goto Top
Hallo caspi-pirna und auch von mir ein Willkommen!

Da Du ja an sich die aktuellste Datei suchst, wäre mein Ansatz eher:
for /F "delims=" %%a in ('dir /b/on/a-d 20*Basis-Backup.7z') do set "str=%%a"  
>inhalt_temp.txt echo %str%
echo Aktuelles Datum: %str%
set "jahr=%str:~0,4%"  
set "monat=%str:~5,2%"  
set "tag=%str:~8,2%"  
			 
echo Tag: %tag%
echo Monat: %monat%
echo Jahr: %jahr%
Was machst du in weiterer Folge eigentlich noch mit den Variablen %jahr%, %monat% und %tag%?

Grüße
bastla