narthan
Goto Top

Spezielles Batch Problem mit Zahlen 20 + 29

Guten Tag Administratoren,

ich habe eine Problem mit meinem Batch Script. Die Ausgangslage sieht wie folgt aus: Ein Programm speichert jeden Tag automatisch Daten in mehreren tausend .dat Dateien (kein bemerkenswerter Unterschied zu .txt) in diversen Ordnern (Abhängig von Jahr\Monat\Tag). Ich benötige nun 2 bestimmte Informationen aus einer speziellen .dat Datei, wenn ein bestimmter Begriff in dieser Datei vorkommt. Die Ordnerstruktur sieht wie folgt aus:

Z:\"festerPfad"\"Jahr"\"Monat"\"Tag"\"*.dat"

D.h. für jeden Tag wird ein neuer Ordner erstellt, in dem die .dat Dateien für diesen Tag abgelegt werden. Das gleiche gilt für Monat etc.

Mein Batch-Skript funktioniert soweit ganz gut. Den Starttag und Startmonat geb ich über txt-Dateien vor und am Ende des Skriptes wird der Tag auf den darauffolgenden Tag gesetzt. Bei Monatswechsel wird der Monat entsprechend inkrementiert.

Mein Problem ist nun folgendes: Mein Skript funktioniert für alle Tage bis auf den 20. und 29. und ich habe keine Ahnung wieso. Vor allem erscheint der Fehler bereits vor jeglicher Umrechnung des Datums, von daher steh ich noch mehr auf dem Schlauch.

Ein Teil meines Codes (wenn auch nicht hübsch):

@ECHO OFF & SETLOCAL enabledelayedexpansion 

Z:

set "mainfolder=Z:\Daten\2016"  
set /p month= < Z:\Daten\2016\month.txt
set /p day= < Z:\Daten\2016\day.txt
set "res1=Z:\Daten\2016\res.txt"  
set "res2=Z:\Daten\2016\res2.txt"  
set "res3=Z:\Daten\2016\res3.txt"  
set "monthpath=Z:\Daten\2016\month.txt"  
set "daypath=Z:\Daten\2016\day.txt"  


@REM 	Löschen der Dateien, falls sie (noch) existieren
IF EXIST %res1% (DEL /f %res1% 1>NUL 2>NUL)
IF EXIST %res2% (DEL /f %res2% 1>NUL 2>NUL)
IF EXIST %res3% (DEL /f %res3% 1>NUL 2>NUL)

@REM ECHO %mainfolder%\%month%\%day%

FOR /f %%i in ('findstr /i /c:"Suchbegriff1" "%mainfolder%\%month%\%day%\*.dat"') DO echo %%i>>%res1%  
FOR /f "tokens=1,2 delims=:" %%j in (%res1%) DO echo %%j:%%k>> %res2%  
FOR /f %%l in (%res2%) DO (
 	findstr /i /c:"Suchbegriff2" %%l>> %res3%  
	findstr /i /c:"Suchbegriff3" %%l>> %res3%  
)
@REM pause
REM --------- Umwandlung aufgrund oktaler Probleme in Batch ---------
IF [08]==[%month%] SET /a "month"=8  
IF [09]==[%month%] SET /a "month"=9  
IF [08]==[%day%] SET /a "day"=8  
IF [09]==[%day%] SET /a "day"=9  

set /a month_old=%month%
set /a day_old=%day%
GOTO :DAY1

:DAY1
SET "GruppeA="  
IF "%month_old%"=="1" SET "GruppeA=True"  
IF "%month_old%"=="3" SET "GruppeA=True"  
IF "%month_old%"=="5" SET "GruppeA=True"  
IF "%month_old%"=="7" SET "GruppeA=True"  
IF "%month_old%"=="8" SET "GruppeA=True"  
IF "%month_old%"=="10" SET "GruppeA=True"  
IF "%month_old%"=="12" SET "GruppeA=True"  
IF defined GruppeA (
	IF "%day_old%" EQU "31" (  
	set day_new=01
	GOTO :JAN
	) ELSE (
	set /a day_new=%day_old%+1
	set month_new=%month_old%
	GOTO :WEITER
	)
) ELSE (
GOTO :DAY2
)

:DAY2
SET "GruppeB="  
IF "%month_old%"=="4" SET "GruppeB=True"  
IF "%month_old%"=="6" SET "GruppeB=True"  
IF "%month_old%"=="9" SET "GruppeB=True"  
IF "%month_old%"=="11" SET "GruppeB=True"  
IF defined GruppeB (
	IF "%day_old%" EQU "30" (  
	set day_new=01
	GOTO :JAN
	) ELSE (
	set /a day_new=%day_old%+1
	set month_new=%month_old%
	GOTO :WEITER
	)
) ELSE (
GOTO :DAY3
)

:DAY3
SET "GruppeC="  
IF "%month_old%"=="2" SET "GruppeC=True"  
IF defined GruppeC (
	IF "%day_old%" EQU "28" (  
	set day_new=01
	GOTO :JAN
	) ELSE (
	set /a day_new=%day_old%+1
	set month_new=%month_old%
	GOTO :WEITER
	)
) ELSE (
GOTO :WEITER
)

...usw. Rest ist nur noch Datums-Änderung und noch weniger hübsch :P ...


Der Fehler der in der Konsole erscheint ist folgender:
"The system cannot find the file Z:\Daten\2016\res.txt."
"The system cannot find the file Z:\Daten\2016\rest2.txt."

Dateien mit dem Suchbegriff1 gibt es in beiden Ordnern 20+29, also dürfte er eigtl. wie an allen anderen Tagen keine Probleme mit dem Schreiben in res.txt und damit auch in res2.txt haben.

Ich hoffe es ist ein dummer Fehler und es kann mir jemand helfen face-smile

Grüße,
narthan

Content-ID: 308479

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

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

holli.zimmi
holli.zimmi 29.06.2016 um 15:48:13 Uhr
Goto Top
Hi,

warum machst Du nicht eine extra Schleife wegen den 20. und 29. Tag?

Gruß

Holli
narthan
narthan 29.06.2016, aktualisiert am 30.06.2016 um 09:23:07 Uhr
Goto Top
Hi Holli,

Zitat von @holli.zimmi:
warum machst Du nicht eine extra Schleife wegen den 20. und 29. Tag?

ich verstehe nicht so ganz, was das bringen soll, aber ich werde es mal ausprobieren und anschließend berichten face-smile

EDIT:
Moin Holli,
ich habe es mit einer extra If-Abfrage + Schleife für die beide Tage versucht, allerdings lief es auf den selben Fehler hinaus.

Ich habe allerdings die wahre Ursache für das Problem ausmachen können und nun funktioniert das Script ohne Probleme. Es befand sich in den beiden Ordnern 20 und 29 jeweils eine korrupte .dat Datei mit mehreren "Suchbegriff1" Elementen. Diese kann ich über einen Filter im Programm jedoch von vornherein vermeiden face-smile

Trotzdem danke!


Gruß,
narthan