Zeitfunktion: Minuten addieren
Zeitfunktion: Minuten addieren
Guten Tag,
ich komme bei meinem Problem nicht weiter und hoffe, dass mir in diesem Forum jemand weiterhelfen kann.
Ich möchte auf die aktuelle Uhrzeit in einer DOS-Batch 2 Minuten hinzu addieren und mit führenden Nullen ausgeben.
Beispiel: Uhrzeit 09:59:00 soll zu 10:01:00 (und genau in diesem Format) werden.
Ich bekomme zwar mit
set /a minute=%time:~3,2%+2
die 2 Minuten addiert, jedoch ist dann die führende Null weg und der Stundenwechsel fehlt.
Kann mir jemand vielleicht einen Tip geben?
Schönen Gruß
Christoph
ich komme bei meinem Problem nicht weiter und hoffe, dass mir in diesem Forum jemand weiterhelfen kann.
Ich möchte auf die aktuelle Uhrzeit in einer DOS-Batch 2 Minuten hinzu addieren und mit führenden Nullen ausgeben.
Beispiel: Uhrzeit 09:59:00 soll zu 10:01:00 (und genau in diesem Format) werden.
Ich bekomme zwar mit
set /a minute=%time:~3,2%+2
die 2 Minuten addiert, jedoch ist dann die führende Null weg und der Stundenwechsel fehlt.
Kann mir jemand vielleicht einen Tip geben?
Schönen Gruß
Christoph
Re: Zeitfunktion: Minuten addieren
Daß so etwas in DOS-Batches geht, ist mir eigentlich total unbekannt. (Ich meine dieses :~3,2 Format und so.) Mit einer kleinen EXE könnte man so etwas wohl machen. Das Problem wäre, daß man, um es sauber in eine Umgebungsvariable zu bekommen, zwei ineinander verschachtelte BAT Dateien benutzen müßte, wobei die zweite von der EXE erstellt werden würde.Gast hat geschrieben:Guten Tag,
ich komme bei meinem Problem nicht weiter und hoffe, dass mir in diesem Forum jemand weiterhelfen kann.
Ich möchte auf die aktuelle Uhrzeit in einer DOS-Batch 2 Minuten hinzu addieren und mit führenden Nullen ausgeben.
Beispiel: Uhrzeit 09:59:00 soll zu 10:01:00 (und genau in diesem Format) werden.
Ich bekomme zwar mit
set /a minute=%time:~3,2%+2
die 2 Minuten addiert, jedoch ist dann die führende Null weg und der Stundenwechsel fehlt.
Kann mir jemand vielleicht einen Tip geben?
Schönen Gruß
Christoph
Beispiel, sowas wie:
--------------
ADD2.EXE >DOSET.BAT
DOSET.BAT
--------------
und die Exe selber würde nur den Zeitstring erzeugen und einfach "ausgeben".
Also die EXE würde ausgeben: SET MINUTE=xx:yy:zz
(wobei xx:yy:zz dann die Zeit im richtigen Format wäre)
Man könnte es auch so machen, daß die EXE es NICHT ausgibt, sondern selbst diese DOSET.BAT generiert.
Aber ersteres würde halt bewirken, daß, wenn man die EXE ohne die Ausgabe-Umleitung (also dieses > ) startet, den Kram auf dem Bildschirm (statt in ein File) ausgeben würde.
Soll ich so eine ADD2.EXE mal fix schreiben oder kriegst Du die selbst hin? (Kostet mich 5 Minuten.)
Re: Zeitfunktion: Minuten addieren
Das mit der exe hatte ich mir auch schon überlegt. Ich hätte das in VB6 programmiert.
Der Übersichtlichkeithalber würde ich jedoch lieber alles in der Batch stehen haben.
So können auch weitere Beteiligte nachvollziehen, was ich mache (denn in die exe kann
man für gewöhnlich nicht hineinschauen). Also mit
set /a minute=%time:~3,2%+2
bekomme ich 2 Minuten auf die aktuelle Minutenzahl addiert . Einstellige Minutenzahlen (0-9)
werden jedoch nur einstellig ausgegeben. Das liegt am Schalter "/a", der das Ergebnis offensichtlich
in einen Ausdruck verwandelt. Es wäre mir ja schon geholfen, wenn ich
- herausbekomme, ob der Wert in minute kleiner als 10 ist (if minute < 10 then set Minute=0Minute)
- oder die Variable minute so formatieren kann, dass sie 2-stellig wird (z.B. format(minute, "00"))
Gruss Christoph
Der Übersichtlichkeithalber würde ich jedoch lieber alles in der Batch stehen haben.
So können auch weitere Beteiligte nachvollziehen, was ich mache (denn in die exe kann
man für gewöhnlich nicht hineinschauen). Also mit
set /a minute=%time:~3,2%+2
bekomme ich 2 Minuten auf die aktuelle Minutenzahl addiert . Einstellige Minutenzahlen (0-9)
werden jedoch nur einstellig ausgegeben. Das liegt am Schalter "/a", der das Ergebnis offensichtlich
in einen Ausdruck verwandelt. Es wäre mir ja schon geholfen, wenn ich
- herausbekomme, ob der Wert in minute kleiner als 10 ist (if minute < 10 then set Minute=0Minute)
- oder die Variable minute so formatieren kann, dass sie 2-stellig wird (z.B. format(minute, "00"))
Gruss Christoph
Re: Zeitfunktion: Minuten addieren
Naja, das ist wahrscheinlich Windows-Kram, damit kenn ich mich nicht aus. Ist hier wahrscheinlich das falsche Forum dafür - aber vielleicht hat ja trotzdem jemand einen Tip.Gast hat geschrieben:Das mit der exe hatte ich mir auch schon überlegt. Ich hätte das in VB6 programmiert.
Der Übersichtlichkeithalber würde ich jedoch lieber alles in der Batch stehen haben.
So können auch weitere Beteiligte nachvollziehen, was ich mache (denn in die exe kann
man für gewöhnlich nicht hineinschauen). Also mit
set /a minute=%time:~3,2%+2
bekomme ich 2 Minuten auf die aktuelle Minutenzahl addiert . Einstellige Minutenzahlen (0-9)
werden jedoch nur einstellig ausgegeben. Das liegt am Schalter "/a", der das Ergebnis offensichtlich
in einen Ausdruck verwandelt. Es wäre mir ja schon geholfen, wenn ich
- herausbekomme, ob der Wert in minute kleiner als 10 ist (if minute < 10 then set Minute=0Minute)
- oder die Variable minute so formatieren kann, dass sie 2-stellig wird (z.B. format(minute, "00"))
Gruss Christoph
Re: Zeitfunktion: Minuten addieren
Habe so ein ähnliches Problem für Monat und Jahr gelöst, um Daten zu sichern, sehr praktisch:
rem richtiges Datum suchen und 3 Monate zurück wählen
set jahr=%date:~6,4%
set /a monat=%date:~3,2%-3
set tag=%date:~0,2%
if %monat% LSS 1 set /a jahr-=1
if %monat% LSS 1 set /a monat+=12
if %monat% LSS 10 set monat=0%monat%
echo %monat%
echo %jahr%
Hoffe, ich kann jemand auch jetzt noch helfen....
rem richtiges Datum suchen und 3 Monate zurück wählen
set jahr=%date:~6,4%
set /a monat=%date:~3,2%-3
set tag=%date:~0,2%
if %monat% LSS 1 set /a jahr-=1
if %monat% LSS 1 set /a monat+=12
if %monat% LSS 10 set monat=0%monat%
echo %monat%
echo %jahr%
Hoffe, ich kann jemand auch jetzt noch helfen....
Re: Zeitfunktion: Minuten addieren
Man kann auch ein paar Assembler-Anweisungen in eine Batchdatei schreiben, die dann an Debug übergeben werden, so das Debug sie zur Ausführung bringt.Gast hat geschrieben:Das mit der exe hatte ich mir auch schon überlegt. Ich hätte das in VB6 programmiert.
Der Übersichtlichkeithalber würde ich jedoch lieber alles in der Batch stehen haben.
So können auch weitere Beteiligte nachvollziehen, was ich mache (denn in die exe kann
man für gewöhnlich nicht hineinschauen).
Auf diese Weise lassen sich auch DOS-Interrupts aufrufen, um z. B. die aktuelle System-Zeit zu holen. Nach dem Aufruf befinden sich in verschiedenen CPU-Registern die jeweiligen Werte für Stunde, Minute und Sekunde.
Diese Werte können wir nun belibig verändern und danach ausgeben. Anhand der lesbaren Assemblerbefehle innerhalb der Batchdatei können auch andere kundige Leser nachvollziehen was hier gemacht wird.
http://www.pobox.com/~ralf/files.html
ftp://ftp.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/
RBIL->inter61b.zip->Interrup.f
Code: Alles auswählen
--------D-212C-------------------------------
INT 21 - DOS 1+ - GET SYSTEM TIME
AH = 2Ch
Return: CH = hour
CL = minute
DH = second
DL = 1/100 seconds
Note: on most systems, the resolution of the system clock is about 5/100sec,
so returned times generally do not increment by 1
on some systems, DL may always return 00h
SeeAlso: AH=2Ah,AH=2Dh,AH=E7h"Novell",INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
SeeAlso: INT 2F/AX=120Dh
@echo off
echo a cs:0200 db "00:00:00$">tmp.deb
echo org 0100>>tmp.deb
echo mov ah,2C>>tmp.deb
echo int 21>>tmp.deb
.....weitere Befehle für Register auswerten, addieren und ausgeben....
echo g=cs:0100 zweiter Parameter>>tmp.deb
echo q>>tmp.deb
debug <tmp.deb
del tmp.deb
(zweiter Parameter = Offset nach dem letzten Befehl)
http://www.angelfire.com/electronic/tri ... /Debug.doc
http://www.armory.com/~rstevew/Public/T ... anual.html
Dirk
Re: Zeitfunktion: Minuten addieren
Hi Lara,
cooles Script! Danke für die Info, aber habt ihr gesehen, dass das ganz über ein Jahr alt ist?
Gruß
dominik
cooles Script! Danke für die Info, aber habt ihr gesehen, dass das ganz über ein Jahr alt ist?
Gruß
dominik
Re: Zeitfunktion: Minuten addieren
Wenn es wirklich "echtes" DOS ist und nicht irgend eine DOS-Umgebung unter irgend einer Windowsversion, dann könnte es in etwa so gehen:
@echo off
timestmp +h +i +s | pipeset HR MI SE
printf "%%02d:%%02d:%%02d\n" %HR% %MI% %SE%
rpn /R-60 /Emi %mi% ++ ++
if errorlevel 1 goto skip
rpn /Emi %mi% 60 \
rpn /Ehr %hr% ++
:skip
printf "%%02d:%%02d:%%02d\n" %HR% %MI% %SE%
wobei die Prozedur gegebenenfalls noch ein bisschen an die konkreten Wünsche und Anforderungen angepasst werden könnte bzw. müsste
@echo off
timestmp +h +i +s | pipeset HR MI SE
printf "%%02d:%%02d:%%02d\n" %HR% %MI% %SE%
rpn /R-60 /Emi %mi% ++ ++
if errorlevel 1 goto skip
rpn /Emi %mi% 60 \
rpn /Ehr %hr% ++
:skip
printf "%%02d:%%02d:%%02d\n" %HR% %MI% %SE%
wobei die Prozedur gegebenenfalls noch ein bisschen an die konkreten Wünsche und Anforderungen angepasst werden könnte bzw. müsste
Re: Zeitfunktion: Minuten addieren
Wo kann man denn Batchbefehle wie timestmp, printf und rpn in einem "echtes" DOS finden, sind das FREEDOS-Befehle?Gast hat geschrieben:Wenn es wirklich "echtes" DOS ist und nicht irgend eine DOS-Umgebung unter irgend einer Windowsversion, dann könnte es in etwa so gehen:
@echo off
timestmp +h +i +s | pipeset HR MI SE
printf "%%02d:%%02d:%%02d\n" %HR% %MI% %SE%
rpn /R-60 /Emi %mi% ++ ++
if errorlevel 1 goto skip
rpn /Emi %mi% 60 \
rpn /Ehr %hr% ++
:skip
printf "%%02d:%%02d:%%02d\n" %HR% %MI% %SE%
wobei die Prozedur gegebenenfalls noch ein bisschen an die konkreten Wünsche und Anforderungen angepasst werden könnte bzw. müsste
Dirk
Re: Zeitfunktion: Minuten addieren
Als DOS-Kenner wirst du sicherlich wissen, dass "Befehle" und "Programme" unter DOS eigentlich ein und das selbe sind. OK, genau genommen gilt das so nur für externe Befehle aber dieser Unterschied spielt hier keine Rolle.
Die Programme TIMESTMP.COM, PIPESET.COM, RPN.COM und PRINTF.COM findest du, zusammen mit noch einer Reihe weiterer mehr oder weniger nützlicher Dienstprogramme, im Archiv DOSUTILS.ZIP. Dieses wiederum kannst du hier: http://www.bttr-software.de/products/jhoffmann/ herunter laden.
Die Programme TIMESTMP.COM, PIPESET.COM, RPN.COM und PRINTF.COM findest du, zusammen mit noch einer Reihe weiterer mehr oder weniger nützlicher Dienstprogramme, im Archiv DOSUTILS.ZIP. Dieses wiederum kannst du hier: http://www.bttr-software.de/products/jhoffmann/ herunter laden.
Re: Zeitfunktion: Minuten addieren
Nicht ganz, denn man kann dabei zwischen externen Programmen und internen Command.com-Befehlen für Batchdateien unterscheiden.Gast hat geschrieben:Als DOS-Kenner wirst du sicherlich wissen, dass "Befehle" und "Programme" unter DOS eigentlich ein und das selbe sind.
Ob nun extern, oder intern spielt für die Benutzung schon eine gewisse Rolle, denn solche Teile von Command.com können im Speicher verbleiben und externe Befehle müssen halt von einem Datenträger jedes Mal erneut geladen werden, damit sie ausgeführt werden können, falls ein verwendeter Cache solche Daten noch nicht, oder nicht mehr im Speicher hat, oder man gar keinen Cache dafür verwendet, um solche Daten zu buffern. Werden dann diese externen Daten von einer Floppi geholt, dann dauert es einige Zeit bis eine Batchdatei damit weiter machen kann. So auch bei der Verwendung von Debug, um damit temporäre Opcodes zu erzeugen.OK, genau genommen gilt das so nur für externe Befehle aber dieser Unterschied spielt hier keine Rolle.
Ah, daher kann man diese Programme bekommen. Danke für die Info.Die Programme TIMESTMP.COM, PIPESET.COM, RPN.COM und PRINTF.COM findest du, zusammen mit noch einer Reihe weiterer mehr oder weniger nützlicher Dienstprogramme, im Archiv DOSUTILS.ZIP. Dieses wiederum kannst du hier: http://www.bttr-software.de/products/jhoffmann/ herunter laden.
Dirk