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):
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
Grüße,
narthan
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
Grüße,
narthan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 308479
Url: https://administrator.de/contentid/308479
Ausgedruckt am: 08.11.2024 um 11:11 Uhr
2 Kommentare
Neuester Kommentar