christiank
Goto Top

Wert in einer Abfrage wird nicht in Datei geschrieben

Hallo

ich habe ein CSV file welches mit Uhrzeiten befüllt ist.
Dieses CSV file sieht wie folgt aus:
 0:00
 0:05
bis
23:45
23:50
23:55

Jetzt hab ich mir folgendes Script gebaut, welches alle 5 Minuten gestartet wird.

@echo off
set TIME_HOUR=%time:~-11,2%
set TIME_MIN=%time:~-8,2%

set LOG=Mappe.csv
set LOGNEW=%LOG:~0,-4%_temp.csv

set USER=%random%

FOR /F "tokens=1,2* delims=;" %%i in (%LOG%) do (  
IF "%%i" EQU "%TIME_HOUR%:%TIME_MIN%" (  
	echo Write: %%i;%%j;%USER%
	echo %%i;%%j;%USER%>>%LOGNEW%
) ELSE ( 
	echo %%i;%%j>>%LOGNEW%
)
)
del %LOG%
ren %LOGNEW% %LOG%

Leider wird der Wert %%i;%%j;%USER% nie in das file geschrieben. Ich verstehe jedoch nicht wieso das so ist.
Vielleicht hat ja jemand eine Idee zu meinem Problem.

Das CSV file sollte dann um beispielsweise 23:45 wie folgt aussehen:
 0:00;
 0:05;
bis
23:45;0815
23:50;
23:55;

Danke schon mal.
Gruß
Christian

[Edit Biber] Codeformatieung [/Edit]

Content-ID: 185385

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

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

Skyemugen
Skyemugen 23.05.2012 aktualisiert um 15:34:17 Uhr
Goto Top
Aloha,

1. möchte ich dich bitten, unsere schöne ##blue|## Formatierung anzuwenden und edit: Biber war schneller
2. kann ich dir beim groben Überflug garantieren, dass es logisch ist, dass er zumindest zwischen 0:00 und 10:00 ins ELSE gehen wird, da %time:~-11,2% in dieser Zeit folgendes anzeigt: "h" und nicht "h" ergo ist "0:00" <> " 0:00".

greetz André
christiank
christiank 23.05.2012 um 15:43:15 Uhr
Goto Top
Hallo André & Biber,

danke schon mal für die Antwort.
Habe jetzt auch schon bei dem csv Teil verwendet.
Nun sieht man auch, dass das " 0:00" verwendet wird und somit sie bedingung erfüllt sein sollte.
Leider geht es nicht und ich hab einfach keine Idee wieso es so ist.

Vielleicht hat ja noch jemand eine Idee.

Gruß
Christian
Skyemugen
Skyemugen 23.05.2012 aktualisiert um 16:03:43 Uhr
Goto Top
Aloha Christian,

dann wird dein Skript nicht genau zum 5-Minuten-Zeitpunkt ausgeführt, denn ein kurzer Test bei mir ergab keine Probleme ... (Windows XP x86)

greetz André

P.S.: Zeile 1 ändern und anschauen, was wie befüllt wird und vor sich geht (ggf. in der cmd), schon getan?
mak-xxl
mak-xxl 23.05.2012 aktualisiert um 21:35:00 Uhr
Goto Top
Moin christiank,

nachdem ich mir das Ganze mehrmals angesehen habe, stellt sich mir zunehmend die Frage, was Du mit dem Script erreichen willst:

  • es startet ein Batchjob alle 5' (hoffentlich Minute mod 5 = 0),
  • der prüft, ob eine in der csv-Datei ('Mappe.csv') notierte Uhrzeit auf die aktuelle Uhrzeit (die nicht AM/PM sein darf) passt. (Das ist der Fall, wenn der Job von Sekunde 1 bis 60 der o.a. Minute den Vergleich durchführt - ok)
  • ist der Vergleich positiv, wird die Zeit aus der csv-Datei ('%%i') mit einem eventuell vorh. zweiten String ('%%j') und einem (zufälligen?) User-String an das Ende der temporären Log-Datei gehängt (Zeile 13),
  • diese wird abschließend wieder zur zu prüfenden 'Mappe.csv' gemacht (Zeilen 18+19).
  • ist der Vergleich negativ, wird die eben geprüfte Uhrzeit mit einem eventuell vorh. zweiten String ans Ende der temporären Log-Datei gehängt (Zeile 15),
  • weiter wie vorheriger Punkt.

Nach einem erfolgreichen Durchlauf ist die Datei mit genau einer Zeile Uhrzeit (letzter Treffer) ausgerüstet und wird - da sie als Uhrzeit-Vorlage herhalten muss (Zeile 10) - bei einem Vergleich erst wieder am nächsten Tag zur Uhrzeit einen Treffer liefern (falls die Minute stimmt), diese wird dann 2x drinstehen, 4x, 8x, usw. usf. ... bis die Laufzeit des Scriptes auf die bearbeitete Zeilenzahl begrenzend wirkt - resp. nach einer Minute keine Treffer mehr erfolgen und damit keine weiteren Zeilen mehr geschrieben werden.

Also, wenn Du Cron testen willst, ob der, über den Tag verteilt, wenigstens auf die Minute genau startet - hmm.

Was soll das Konstrukt bewirken?

Freundliche Grüße von der Insel - Mario
pieh-ejdsch
pieh-ejdsch 23.05.2012 aktualisiert um 22:31:01 Uhr
Goto Top
moin Mario,

die CSV wird doch neu erstellt und umbenannt.
der Rest sollte aber ohne vornull berechnet werden.
set /a 1/(1%time:~-8,2% %%5) 2>nul >&2 &&echo Der Batch wurde nicht zum richtigen Zeitpunkt gestartet &&echo exit /b 1 ||echo %time:~-11,5% Taktung ist in Ordnung &&echo exit /b 0

Gruß Phil
christiank
christiank 25.05.2012 um 16:19:02 Uhr
Goto Top
Die Idee war, eine CSV zu haben in der alle 5 Minuten ein Wert an die passende stelle geschrieben wird. So eine Art Auswertung. Das Script so wie es ist ist ja auch nicht komplett...
Statt dem Zufallswert, wird eine Zahl gespeichert, welche ich geliefert bekommen.
Selsamerweise funktioniert das Script nun.