Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Kleine Frage zu Batch - Uhrzeit-Variable

Frage Entwicklung Batch & Shell

Mitglied: narthan

narthan (Level 1) - Jetzt verbinden

25.04.2014, aktualisiert 29.04.2014, 2164 Aufrufe, 18 Kommentare, 5 Danke

Hallo Administratoren,

ich bastel gerade an einem relativ aufwendigen Skript (für meine Batch-Kenntnisse sehr umfangreich) und habe ein kleines Problem mit Daten und Uhrzeiten.

Bsp.
ich habe 2 Werte:
2014-04-25T07:15:00
2014-04-25T09:45:00

Nun möchte ich die Werte zwischen den beiden Werten abbilden, im 15 Minuten-Takt:
also
2014-04-25T07:30:00
2014-04-25T07:45:00
2014-04-25T08:00:00
usw. bis 09:45:00

Mein Problem ist nun folgendes:
Da es sich hierbei nicht um Dezimalzahlen handelt, weiß ich nicht wie ich Batch sagen soll, bei 60min die Stunde um 1 zu erhöhen, z.B. beim Sprung von 7:45 Uhr auf 8:00 Uhr.
Ist es möglich, die Zahlen in einer Variablen mit "Uhrzeit"-Format oder ähnliches zu speichern und so weiterzurechnen?
Oder bleibt mir nur übrig, mit Dutzenden von Bedingungen diese Idee umzusetzen?

Grüße,
narthan


PS: die Zeiten lese ich aus einer INPUT.txt Datei.
Mitglied: bastla
LÖSUNG 25.04.2014, aktualisiert 29.04.2014
Hallo narthan!
Ist es möglich, die Zahlen in einer Variablen mit "Uhrzeit"-Format oder ähnliches zu speichern und so weiterzurechnen?
Neine - in CMD gibt es noch nicht mal Dezimalzahlen ...

Lässt sich zur Not auch in Batch umsetzen, falls aber auch noch ein Übertrag auf den nächsten Tag zu berücksichtigen wäre, wird das eher ein Krampf ...

... daher würde ich in diesem Fall zu ein wenig (integriertem) VBS greifen - Beispiel:
01.
@echo off & setlocal 
02.
set "Von=2014-04-25T07:15:00" 
03.
set "Bis=2014-04-25T09:45:00" 
04.
 
05.
set "VBS=%temp%\ML.vbs" 
06.
 >%VBS% echo Set a=WScript.Arguments:V=CDate(Replace(a(0),"T"," ")):B=CDate(Replace(a(1),"T"," ")) 
07.
>>%VBS% echo For i=V To B-0.0001 Step (1/24*0.25):O=O^&FormatDateTime(i)^&vbCrLf:Next:O=O^&B:WScript.Echo Replace(O," ","T") 
08.
 
09.
cscript //nologo %VBS% %Von% %Bis% 
10.
::for /f %%t in ('cscript //nologo %VBS% %Von% %Bis%') do echo #%%t# 
11.
 
12.
del %VBS%
Der Batch erstellt ein kleines VBScript, übergibt diesem Anfangs- und Endzeit und erhält zeilenweise als Ergebnis die gewünschte Liste. Falls die Endzeit nicht genau auf eine Viertelstunde fallen sollte (im Beispiel etwa Bis=25.04.2014T09:40:00), wird die letzte volle Viertelstunde (wäre 25.04.2014T09:30:00) vor der Endzeit und die Endzeit ausgegeben.

Je nachdem, ob Du nur die Gesamtliste benötigst oder jede Zeile einzeln noch weiter verarbeitet werden soll, kannst Du die Zeilen 9 oder 10 verwenden.

[Edit] Jetzt die richtige Version oben und als Nachtrag: Wenn sicher ist, dass Beginn- und Endedatum am gleichen Tag liegen, als Batch only etwa so:
01.
@echo off & setlocal 
02.
set "Von=2014-04-25T07:15:00" 
03.
set "Bis=2014-04-25T09:45:00" 
04.
 
05.
for /f "tokens=1-4 delims=T:" %%a in ("%Von%") do set "VonDatum=%%a" & set "VonStunde=1%%b" & set "VonMinute=1%%c" & set "VonSekunde=%%d" 
06.
 
07.
echo %Von% 
08.
set "Timestamp=" 
09.
:Loop 
10.
if #%Timestamp%# geq #%Bis%# goto :Next 
11.
set /a VonMinute+=15 
12.
if %VonMinute% geq 160 ( 
13.
    set /a VonStunde+=1 
14.
    set /a VonMinute-=60 
15.
16.
set "Timestamp=%VonDatum%T%VonStunde:~-2%:%VonMinute:~-2%:%VonSekunde%" 
17.
echo %Timestamp% 
18.
goto :Loop 
19.
 
20.
:Next 
21.
echo hier geht's weiter
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: 115420
LÖSUNG 26.04.2014, aktualisiert 29.04.2014
Hallo!

Und wenn's etwas flexibler sein soll:
01.
@echo off & setlocal 
02.
set "Von=25-04-2014T07:15:00" 
03.
set "Bis=25-04-2014T09:45:00" 
04.
set "Type=n" 	::Interval: Jahr(y),Monat(m),Tag(d),Stunde(h),Minute(n),Sekunde(s) 
05.
set "Step=15"	::Schrittzahl 
06.
 
07.
set "VBS=%temp%\ML.vbs" 
08.
 >%VBS% echo Set a=WScript.Arguments:d1=CDate(Replace(a(0),"T"," ")):d2=CDate(Replace(a(1),"T"," ")) 
09.
>>%VBS% echo For d=d1 To d2-DateAdd("s", 1, 0) Step DateAdd(a(2),a(3),0):s=s^&d^&vbCrLf:Next:WScript.Echo Replace(s^&d2," ","T") 
10.
 
11.
cscript //nologo %VBS% %Von% %Bis% %Type% %Step% 
12.
::for /f %%t in ('cscript //nologo %VBS% %Von% %Bis% %Type% %Step%') do echo #%%t# 
13.
 
14.
del %VBS%
Wobei zwecks Rechengenauigkeit von der Endzeit 1 Sekunde abgezogen wird. Ansonsten erfasst die For-Schleife zwar alle Werte für den 15-Minutentakt, aber beispielsweise nicht beim 1-Minutentakt. D.h. Die Schleife läuft immer nur bis zur vorletzten Endzeit und die tatsächliche Endzeit wird anschließend angefügt...

Bleibt die Frage offen, ob das Datum auch mit Bindestriche ausgegeben werden soll, insofern müsste
01.
WScript.Echo Replace(s^&d2," ","T")
durch
01.
WScript.Echo Replace(Replace(s^&d2," ","T"),".","-")
ersetzt werden


Grüße
spatzenhirn
Bitte warten ..
Mitglied: bastla
26.04.2014 um 13:07 Uhr
Hallo spatzenhirn!

Danke für's Ergänzen / den Ausbau zur Luxusvariante ...

Grüße
bastla
Bitte warten ..
Mitglied: 115420
26.04.2014 um 13:47 Uhr
Hallo bastla!

Habe ich doch gern getan

Grüße
spatzenhirn
Bitte warten ..
Mitglied: narthan
29.04.2014 um 14:59 Uhr
Hallo bastla (dachte mir schon im Vorhinein, dass DU mir hier ganz sicher weiterhelfen kannst ;) ) und spatzenhirn!

Danke euch beiden!
Tut mir leid dass ich erst heute antworte, war aber über das Wochenende auf einer Dienstreise. Hab es nun allerdings auch schon anders gelöst mit Batch und es funktioniert (hatte viel Zeit auf der Dienstreise... ).
Habe eure Varianten allerdings auch getestet und lief auch astrein damit, daher, herzlichen Dank!

Grüße, narthan
Bitte warten ..
Mitglied: bastla
29.04.2014, aktualisiert um 21:59 Uhr
Hallo narthan!

Danke für den Vertrauensvorschuss.

Magst Du zur Abrundung des Threads noch Deine Lösung reinstellen?

Grüße
bastla
Bitte warten ..
Mitglied: narthan
29.04.2014 um 22:00 Uhr
Nabend bastla!

Na klar, mach ich sofort morgen wenn ich wieder am PC bin
Aber habs wohl sehr umständlich gemacht, als kleine Warnung voraus.

Grüße, narthan
Bitte warten ..
Mitglied: narthan
30.04.2014 um 18:15 Uhr
So jetzt hab ich Zeit:
Ist ziemlich lang und unübersichtlich, sry schonmal dafür.
Mein input Datei sieht in etwa wie folgt aus:

123123#Name#234234#typ1#2013-10-27T19:30:00#200#2013-10-27T20:45:00#550

Zur Erklärung:
1.Zahl und 3.Zahl sind einfach nur Identifikationsnummern bzw. Kennziffer bzgl. des Namens
typ1 ist ein Status
darauf folgt -Datum "T" Uhrzeit- (wobei das T außer Acht gelassen werden kann, keine Bedeutung)
die 200 ist der Startwert, 550 am Zeilenende der Endwert

ein Teil des Codes folgt hier:

01.
 
02.
::die %outputXYZ% Variablen sind temporäre Textdateien zur Zwischenspeicherung 
03.
 
04.
::Uhrzeit 1 Selektion (START) 
05.
FOR /f "tokens=5 delims=#" %%a IN ('findstr /n $ %input%') DO @( 
06.
FOR /l %%z IN (1,1,1) DO ECHO %%a > %output2% 
07.
08.
::Startwert Selektion 
09.
FOR /f "tokens=6 delims=#" %%a IN ('findstr /n $ %input%') DO @( 
10.
FOR /l %%z IN (1,1,1) DO ECHO %%a > %output3% 
11.
12.
::Uhrzeit 2 Selektion (ENDE) 
13.
FOR /f "tokens=7 delims=#" %%a IN ('findstr /n $ %input%') DO @( 
14.
FOR /l %%z IN (1,1,1) DO ECHO %%a >> %output4% 
15.
16.
::Endwert Selektion 
17.
FOR /f "tokens=8 delims=#" %%a IN ('findstr /n $ %input%') DO @( 
18.
FOR /l %%z IN (1,1,1) DO ECHO %%la> %output5% 
19.
20.
 
21.
::Aufteilung Uhrzeit in Minuten und Stunden 
22.
FOR /f "tokens=2 delims=T" %%a IN (%output2%) DO ECHO %%a > %output2% 
23.
FOR /f "tokens=1 delims=:" %%a IN (%output2%) DO SET "WertHour1=%%a" 
24.
FOR /f "tokens=2 delims=:" %%a IN (%output2%) DO SET "WertMin1=%%a" 
25.
 
26.
::Batch rechnet mit Oktalwerten, 08 muss zB. in 8 umgewandelt werden, sonst kommt es zu Problemen bei Rechnungen 
27.
 
28.
IF [08]==[%WertHour1%] SET /a WertHour1=8 
29.
IF [09]==[%WertHour1%] SET /a WertHour1=9 
30.
IF [18]==[%WertHour1%] SET /a WertHour1=18 
31.
IF [19]==[%WertHour1%] SET /a WertHour1=19 
32.
 
33.
SET /a SummeMin1= %WertHour1% * 60 + %WertMin1% 
34.
 
35.
FOR /f "tokens=2 delims=T" %%a IN (%output4%) DO ECHO %%a > %output4% 
36.
FOR /f "tokens=1 delims=:" %%a IN (%output4%) DO SET "WertHour2=%%a" 
37.
FOR /f "tokens=2 delims=:" %%a IN (%output4%) DO SET "WertMin2=%%a" 
38.
IF [08]==[%WertHour2%] SET /a  WertHour2=8 
39.
IF [09]==[%WertHour2%] SET /a WertHour2=9 
40.
SET /a SummeMin2= %WertHour2% * 60 + %WertMin2% 
41.
 
42.
::DIFFERENZ der beiden ZEITWERTE in MINUTEN berechnen und ANZAHL der 15min-Werte ausrechnen 
43.
SET /a Differenz= %SummeMin2% - %SummeMin1% 
44.
SET /a Anzahl= %Differenz% / 15 
45.
 
46.
::DIFFERENZ zwischen Start- und Endwert ermitteln und durch die ANZAHL teilen (das Ergebnis ist also der Durchschnitt) 
47.
FOR /f %%a IN (%output5%) DO SET "ZW2=%%a" 
48.
FOR /f %%a IN (%output3%) DO SET "ZW1=%%a" 
49.
IF [08]==[%ZW2%] SET /a ZW2=8 
50.
IF [09]==[%ZW2%] SET /a ZW2=9 
51.
IF [08]==[%ZW1%] SET /a ZW1=8 
52.
IF [09]==[%ZW1%] SET /a ZW1=9 
53.
SET /a DifferenzZW= %ZW2% - %ZW1% 
54.
SET /a Durchschnitt=%DifferenzZW% / %Anzahl% 
55.
ECHO %DifferenzZW% >> %ergebnis% 
56.
ECHO %Durchschnitt% >> %ergebnis% 
57.
 
58.
::Datum aus Input Datei lesen 
59.
FOR /f "tokens=5 delims=#" %%a IN ('findstr /n $ %input%') DO @( 
60.
FOR /l %%z IN (1,1,1) DO ECHO %%a > %output2% 
61.
62.
FOR /f "tokens=1 delims=T" %%a IN (%output2%) DO SET Datum=%%a 
63.
 
64.
 
65.
::Durchschnittswert auf Startwert addieren, Durchschnittswert auf das Ergebnis davon addieren, usw., um die Werte zwischen Start und Endwert zu erhalten 
66.
SET /a Ticker=1 
67.
SET /a Cntr=0 
68.
 
69.
:ADDITION 
70.
IF /i "%Ticker%" EQU "1" ( 
71.
	GOTO RECHNUNGA 
72.
) ELSE ( 
73.
	GOTO PRUEFEN 
74.
75.
:PRUEFEN 
76.
IF /i "%Ticker%" LSS "%Anzahl%" ( 
77.
	GOTO RECHNUNGB 
78.
) ELSE ( 
79.
	GOTO WEITER 
80.
81.
 
82.
:RECHNUNGA 
83.
SET /a Cntr=%Cntr%+1 
84.
SET /a ZWneu%Cntr%=%ZW1% + %Durchschnitt% 
85.
ECHO !ZWneu%Cntr%! >> Ergebnis%Cntr%.txt 
86.
SET /a Ticker=%Ticker%+1 
87.
GOTO ADDITION 
88.
 
89.
:RECHNUNGB 
90.
SET /a Cntr2=%Cntr%+1 
91.
SET /a ZWneu%Cntr2%=!ZWneu%Cntr%! + %Durchschnitt% 
92.
ECHO !ZWneu%Cntr2%! >> Ergebnis%Cntr2%.txt 
93.
SET /a Cntr=%Cntr%+1 
94.
SET /a Ticker=%Ticker%+1 
95.
GOTO ADDITION 
96.
 
97.
::Uhrzeiten der Zwischenwerte ermitteln                 
98.
:WEITER 
99.
SET /a Tickone=0 
100.
SET /a Ticktwo=0 
101.
SET /a Tickthree=0 
102.
SET /a ErgCntr=1 
103.
 
104.
GOTO PRUEFENA 
105.
 
106.
:PRUEFENA 
107.
IF /i "%Tickone%" EQU "0" ( 
108.
	GOTO MINUTENA 
109.
) ELSE ( 
110.
	GOTO PRUEFENB 
111.
112.
 
113.
:PRUEFENB 
114.
SET /a Anzahl2=%Anzahl%-1 
115.
IF /i "%Tickone%" LSS "%Anzahl2%" ( 
116.
	GOTO MINUTENB 
117.
) ELSE ( 
118.
	GOTO :EOF 
119.
120.
 
121.
:MINUTENA 
122.
SET /a Ticktwo=%Ticktwo%+1 
123.
 
124.
:DNULL 
125.
IF /i "%WertMin1%" EQU "0" ( 
126.
	SET /a WertMin1=15  
127.
	GOTO PLUS1 
128.
) ELSE ( 
129.
	GOTO FZEHN 
130.
131.
:FZEHN 
132.
IF /i "%WertMin1%" EQU "15" ( 
133.
	SET /a WertMin1=30 
134.
	GOTO PLUS1 
135.
) ELSE ( 
136.
	GOTO DZIG 
137.
138.
:DZIG 
139.
IF /i "%WertMin1%" EQU "30" ( 
140.
	SET /a WertMin1=45  
141.
	GOTO PLUS1 
142.
) ELSE ( 
143.
	GOTO FVZIG 
144.
145.
:FVZIG 
146.
IF /i "%WertMin1%" EQU "45" ( 
147.
	SET /a WertMin1=00 
148.
	SET /a WertHour1=%WertHour1%+1 
149.
	GOTO PLUS1 
150.
151.
 
152.
:PLUS1 
153.
SET /a WertMin%Ticktwo%=%WertMin1% 
154.
SET /a WertHour%Ticktwo%=%WertHour1% 
155.
ECHO !WertMin%Ticktwo%! > Minuten%Tickone%.txt 
156.
ECHO !WertHour%Ticktwo%! > Stunden%Tickone%.txt 
157.
::Minutenwert 0 soll als 00, und Stunden sollen mit 2 Ziffern (Bsp. 04 statt 4) angezeigt werden 
158.
IF /i [0]==[!WertMin%Ticktwo%!] ECHO 00 > Minuten%Tickone%.txt 
159.
IF /i [0]==[!WertHour%Ticktwo%!] ECHO 00 > Stunden%Tickone%.txt 
160.
IF /i [1]==[!WertHour%Ticktwo%!] ECHO 01 > Stunden%Tickone%.txt 
161.
IF /i [2]==[!WertHour%Ticktwo%!] ECHO 02 > Stunden%Tickone%.txt 
162.
IF /i [3]==[!WertHour%Ticktwo%!] ECHO 03 > Stunden%Tickone%.txt 
163.
IF /i [4]==[!WertHour%Ticktwo%!] ECHO 04 > Stunden%Tickone%.txt 
164.
IF /i [5]==[!WertHour%Ticktwo%!] ECHO 05 > Stunden%Tickone%.txt 
165.
IF /i [6]==[!WertHour%Ticktwo%!] ECHO 06 > Stunden%Tickone%.txt 
166.
IF /i [7]==[!WertHour%Ticktwo%!] ECHO 07 > Stunden%Tickone%.txt 
167.
IF /i [8]==[!WertHour%Ticktwo%!] ECHO 08 > Stunden%Tickone%.txt 
168.
IF /i [9]==[!WertHour%Ticktwo%!] ECHO 09 > Stunden%Tickone%.txt 
169.
 
170.
FOR /f %%a IN (Minuten%Tickone%.txt) DO SET TestMin=%%a 
171.
FOR /f %%a IN (Stunden%Tickone%.txt) DO SET TestHour=%%a 
172.
FOR /f %%a IN (Ergebnis%ErgCntr%.txt) DO SET TestErg=%%a 
173.
 
174.
::Den Block von <MD> bis </MD> mit dem jeweiligen Datum, Uhrzeit-Wert und Messwert in die OUTPUT.txt schreiben 
175.
REM 
176.
 
177.
FOR /f "tokens=4 delims=#" %%a IN ('findstr /n $ %input%') DO @( 
178.
FOR /l %%z IN (1,1,1) DO ECHO %%a > %output2% 
179.
180.
FOR /f %%a IN (%output2%) DO ECHO %%a >>%output% 
181.
 
182.
ECHO %Datum% um %TestHour%:%TestMin%:00 >> %output% 
183.
 
184.
ECHO %TestErg% >> %output% 
185.
 
186.
SET /a Tickone=%Tickone%+1 
187.
 
188.
GOTO PRUEFENA 
189.
 
190.
:MINUTENB 
191.
SET /a Tickthree=%Ticktwo%+1 
192.
 
193.
:DDNULL 
194.
IF /i "!WertMin%Ticktwo%!" EQU "0" ( 
195.
	SET /a WertMin%Ticktwo%=15  
196.
	GOTO PLUS2 
197.
) ELSE ( 
198.
	GOTO FFZEHN 
199.
200.
:FFZEHN 
201.
IF /i "!WertMin%Ticktwo%!" EQU "15" ( 
202.
	SET /a WertMin%Ticktwo%=30 
203.
	GOTO PLUS2 
204.
) ELSE ( 
205.
	GOTO DDZIG 
206.
207.
:DDZIG 
208.
IF /i "!WertMin%Ticktwo%!" EQU "30" ( 
209.
	SET /a WertMin%Ticktwo%=45  
210.
	GOTO PLUS2 
211.
) ELSE ( 
212.
	GOTO FFVVZIG 
213.
214.
:FFVVZIG 
215.
IF /i "!WertMin%Ticktwo%!" EQU "45" ( 
216.
	SET /a WertMin%Ticktwo%=00 
217.
	SET /a WertHour%Ticktwo%=!WertHour%Ticktwo%!+1 
218.
	GOTO PLUS2 
219.
220.
 
221.
:PLUS2 
222.
SET /a ErgCntr=%ErgCntr%+1 
223.
SET /a WertMin%Tickthree%=!WertMin%Ticktwo%! 
224.
SET /a WertHour%Tickthree%=!WertHour%Ticktwo%! 
225.
ECHO !WertMin%Tickthree%! > Minuten%Tickone%.txt 
226.
ECHO !WertHour%Tickthree%! > Stunden%Tickone%.txt 
227.
IF /i [0]==[!WertMin%Tickthree%!] ECHO 00 > Minuten%Tickone%.txt 
228.
IF /i [0]==[!WertHour%Tickthree%!] ECHO 00 > Stunden%Tickone%.txt 
229.
IF /i [1]==[!WertHour%Tickthree%!] ECHO 01 > Stunden%Tickone%.txt 
230.
IF /i [2]==[!WertHour%Tickthree%!] ECHO 02 > Stunden%Tickone%.txt 
231.
IF /i [3]==[!WertHour%Tickthree%!] ECHO 03 > Stunden%Tickone%.txt 
232.
IF /i [4]==[!WertHour%Tickthree%!] ECHO 04 > Stunden%Tickone%.txt 
233.
IF /i [5]==[!WertHour%Tickthree%!] ECHO 05 > Stunden%Tickone%.txt 
234.
IF /i [6]==[!WertHour%Tickthree%!] ECHO 06 > Stunden%Tickone%.txt 
235.
IF /i [7]==[!WertHour%Tickthree%!] ECHO 07 > Stunden%Tickone%.txt 
236.
IF /i [8]==[!WertHour%Tickthree%!] ECHO 08 > Stunden%Tickone%.txt 
237.
IF /i [9]==[!WertHour%Tickthree%!] ECHO 09 > Stunden%Tickone%.txt 
238.
 
239.
 
240.
FOR /f %%a IN (Minuten%Tickone%.txt) DO SET TestMin=%%a 
241.
FOR /f %%a IN (Stunden%Tickone%.txt) DO SET TestHour=%%a 
242.
FOR /f %%a IN (Ergebnis%ErgCntr%.txt) DO SET TestErg=%%a 
243.
 
244.
FOR /f "tokens=4 delims=#" %%a IN ('findstr /n $ %input%') DO @( 
245.
FOR /l %%z IN (1,1,1) DO ECHO %%a > %output2% 
246.
247.
FOR /f %%a IN (%output2%) DO ECHO %%a >>%output% 
248.
 
249.
ECHO %Datum% um %TestHour%:%TestMin%:00 >> %output% 
250.
 
251.
ECHO %TestErg%  >> %output% 
252.
 
253.
SET /a Tickone=%Tickone%+1 
254.
SET /a Ticktwo=%Ticktwo%+1 
255.
 
256.
GOTO PRUEFENA 
257.
 


Damit kann ich mit der Uhrzeit "rechnen" und für die 15min-Abschnitte die zugehörigen Werte ermitteln.

Mein jetziges Problem ist nur noch, dass das mit der Zeit-"Berechnung" irgendwie nur bis maximal 2,5h Zeitdifferenz funktionieren will (Bsp. 21:15 bis 23:45 geht, bei 21:00 bis 23:45 gibt mir keine Werte mehr)....

Und eigtl sollte es in der Lage sein, sogar eine Differenz von 00:00 Uhr bis 23:45 Uhr berechnen zu können (sprich Zwischenwerte UND die Zwischen-Uhrzeiten), aber das geht irgendwie noch nicht

Gruß,
narthan
Bitte warten ..
Mitglied: 115420
30.04.2014, aktualisiert um 19:05 Uhr
Hallo narthan!

Sehr schöner, wenn auch langer Code Was hälst Du von der Idee, die Anfangs- und Endzeiten in Minuten/Sekunden umzurechnen und dann immer die Minuten dazu zu addieren, bis die Endzeit erreicht ist. Die Zeit im hh:mm-Format erhälts Du ja dann wieder durch eine einfache Division...?

Grüße
spatzenhirn
Bitte warten ..
Mitglied: narthan
30.04.2014 um 19:15 Uhr
Hallo spatzenhirn!


Zitat von 115420:
>
Was hälst Du von der Idee, die Anfangs- und Endzeiten in Minuten/Sekunden umzurechnen und dann immer die Minuten dazu zu addieren, bis die Endzeit erreicht ist.


Das hatte ich mir zuerst auch so überlegt, aber da sah ich ein Problem mit dem Sprung bei 60 Min auf 0 Min und die Erhöhung der Stunde um den Wert 1...Frag mich nicht wieso, weil das ja Quatsch ist, natürlich sollte das gehen!
Muss ich definitiv mal ausprobieren, weil das denke ich auf jeden Fall sinnvoller wär und evtl. sogar mein Problem lösen könnte! Danke für diesen Tipp!

Gruß, narthan
Bitte warten ..
Mitglied: narthan
01.05.2014, aktualisiert um 15:18 Uhr
Moin moin,

ich hab deinen Vorschlag jetzt getestet, dabei ergibt sich jedoch das Problem, dass beim Umrechnen der Minutenwerte ins Uhrzeit-Format die Komma-Stellen ja nicht berücksichtigt werden...

Beispiel:
Minuten-Wert: 285 (entspräche 4:45 Uhr - also x:y Uhr)

Nun teile ich diesen Wert durch 60 und erhalte 4,75 (im Kopf, da Batch lediglich 4 erhält...) - sprich die x Stunden.
Als nächstes müsste ich die 75 mit 0,6 multiplizieren, bzw die 0,75 mit 60 multiplizieren, um die Minuten zu erhalten (sprich die y).

Ich habe mir jetzt überlegt, dies mit 96 IF-Abfragen zu lösen (96 daher, weil der Tag 96 15min-Werte enthält), statt der Umrechnung der Minuten in Stunden, da Batch ja scheinbar mit Kommastellen nicht rechnen kann...

(Das Problem mit der begrenzten Anzahl von Werten ensteht durch deine Vorschlags-Variante übrigens nicht, was schonmal top ist! )

Grüße, narthan
Bitte warten ..
Mitglied: bastla
01.05.2014 um 15:24 Uhr
Hallo narthan!

Abgesehen davon, dass ganz oben auch schon lange ein Batch-Ansatz zum Testen bereit steht:
Minuten-Wert: 285 (entspräche 4:45 Uhr - also x:y Uhr)

Nun teile ich diesen Wert durch 60 und erhalte 4,75 (im Kopf, da Batch lediglich 4 erhält...) - sprich die x Stunden.
Ok
Als nächstes müsste ich die 75 mit 0,6 multiplizieren, bzw die 0,75 mit 60 multiplizieren, um die Minuten zu erhalten (sprich die y).
Du könntest natürlich auch einfach 285 - 60 * Stunde rechnen ...

Grüße
bastla
Bitte warten ..
Mitglied: narthan
01.05.2014 um 15:43 Uhr
Hey bastla!

Zitat von bastla:

Du könntest natürlich auch einfach 285 - 60 * Stunde rechnen ...


Wie dumm von mir, das zu übersehen. Danke dir!

Gruß, narthan
Bitte warten ..
Mitglied: bastla
01.05.2014 um 15:49 Uhr
Hallo narthan!

Um doch noch mal nachzufragen: Hast Du den Ansatz oben überhaupt getestet, und wenn ja, wo hakt's?

Grüße
bastla
Bitte warten ..
Mitglied: narthan
01.05.2014, aktualisiert um 17:59 Uhr
Hey bastla,

Sorry, deine Batch Lösung habe ich jetzt erst gesehen. Die VBS Varianten hatte ich getestet, aber Batch ist mir persönlich lieber....ich werde jetzt sofort deinen Batch Code testen und dann direkt Feedback geben!

Grüße, narthan
Bitte warten ..
Mitglied: narthan
01.05.2014 um 18:00 Uhr
Hatte den oberen Post editiert, aber ich glaub dann bekommt man keine neue Notifikation..

Habs getestet. Ich verstehe 2 Stellen im Code nicht:
--> einmal in Zeile 5, warum muss hier vor %%b und %%c eine "1" stehen?
--> was bewirkt in Zeile 16 die ":~-2" in den beiden Variablen?

--> müsste ich für die 160 (Minuten) immer manuell den Wert eintragen? Oder in dem Fall über meinen Weg die Uhrzeiten in Minuten rechnen und die Differenz in eine Variable speichern und an dieser Stelle in deinem Code einsetzen?

Ansonsten sehr übersichtlich und führt zum Ziel, definitiv besser als meine zu komplizierten Überlegungen.. Für Von und Bis kann ich die Werte ja einfach aus einer temporären Datei einlesen, oder ggf. aus der Input Datei.
Auf diesen Code wär ich selber definitiv niemals gekommen. :-P

Gruß, narthan
Bitte warten ..
Mitglied: bastla
LÖSUNG 01.05.2014, aktualisiert um 20:41 Uhr
Hallo narthan!
einmal in Zeile 5, warum muss hier vor %%b und %%c eine "1" stehen?
Damit wird dann aus zB 05 der Wert 105 - damit bleibt die führende Null erhalten bzw gehst Du dem Problem mit 08 oder 09 (werden wegen der Null als - ungültige - Oktalzahlen interpretiert) aus dem Weg.
was bewirkt in Zeile 16 die ":~-2" in den beiden Variablen?
Dass nur die letzten beiden Stellen (und damit fällt die vorher hinzugefügte 1 wieder weg) verwendet werden - wiederum wegen der führenden Null; siehe dazu set /? ...
müsste ich für die 160 (Minuten) immer manuell den Wert eintragen?
Da die 1 ja nur aus dem vorher beschriebenen Grund dabei ist, wird hier de facto nur mit 60 verglichen, um festzustellen, ob die nächste Stunde erreicht ist; der Wert 160 ist daher konstant und alles, was aus Deinem Code kommen muss sind %Von% und %Bis%, die ich zum Testen in den Zeilen 2 und 3 manuell gesetzt habe.
Für Von und Bis kann ich die Werte ja einfach aus einer temporären Datei einlesen
Temporäre Dateien sind sehr oft in CMD nicht mehr nötig (unter MS-DOS sah es da anders aus) - Du kannst Werte direkt aus einer for /f-Schleife (siehe zB meine Zeile 5) erhalten.
Komplizierter würde es übrigens auch bei meinem Ansatz, wenn ein Übertrag auf den nächsten Tag nötig wäre, da dann ja auch der Monats- und Jahreswechsel (inkl Berücksichtigung von Schaltjahren) zum Tragen kämen (hatten wir zB hier schon mal).

Grüße
bastla
Bitte warten ..
Mitglied: narthan
01.05.2014 um 20:44 Uhr
Hey,

Klasse bastla, danke! Super Erklärung und hat mir sehr weitergeholfen
Dann werde ich mein Skript wohl nochmal mit deiner Lösung neu aufbauen, dadurch wird es mit Sicherheit übersichtlicher und weniger kompliziert.
Tageswechsel wird es definitiv nicht geben, daher passt das so perfekt

Schönen Abend noch,
narthan
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
gelöst Kl. Frage: Log-File schreiben per Batch (3)

Frage von Yauhun zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Variable setzten mit Leerzeichen (3)

Frage von Marlon1 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...

DSL, VDSL
DSL-Signal bewerten (8)

Frage von SarekHL zum Thema DSL, VDSL ...