Win Systemzeit aus Variable oder Textdatei setzen lassen
Hey,
könntet ihr mir ggf. bitte mal kurz eine Hilfestellung / einen richtigen Ansatz geben ?
Ich möchte eine Uhrzeit verarbeiten und als aktuelle Systemzeit setzen und dies am besten stündlich.
Folgende Situation. Eine Übergabevariable z.B. %9 enthält ein Datum und eine Uhrzeit im folgenden Format: 07.01.2010 01:45:38.
Diese Variable könnte ich z.B. in ein Textfile schreiben lassen und dieses dann "filtern" sodass nur noch die Uhrzeit stehen bleibt. Ist das sinnvoll oder kann man das ggf. gleich direkt mit der Variable %9 realisieren ?
Diese Uhrzeit soll dann als Systemzeit gesetzt werden.
Die Synchronisierung der Systemzeit mit einem Timeserver wurde schon deaktiviert.
Ich wollte mir jetzt eine kleine Batch schreiben welche halt die Zeit ausliest / schreibt oder verarbeitet und dann ggf. eine zweite Batch welche die Systemzeit dann setzt. Diese zweite Batch dann mittels Taskplan jede stunde einmal ausführen lassen ?!
Mein aktueller Ansatz sieht so aus:
[code]
@echo off
set zeit=00:00:00
time %zeit%
EXIT
[/code]
Es müsste jetzt irgendwie das Datum aus dem Parameter %9 wegfallen damit ich denn gleich für %zeit% ersetzen könne ?!
Vielen dank für jeden Tipp !
MFG Beatzler
könntet ihr mir ggf. bitte mal kurz eine Hilfestellung / einen richtigen Ansatz geben ?
Ich möchte eine Uhrzeit verarbeiten und als aktuelle Systemzeit setzen und dies am besten stündlich.
Folgende Situation. Eine Übergabevariable z.B. %9 enthält ein Datum und eine Uhrzeit im folgenden Format: 07.01.2010 01:45:38.
Diese Variable könnte ich z.B. in ein Textfile schreiben lassen und dieses dann "filtern" sodass nur noch die Uhrzeit stehen bleibt. Ist das sinnvoll oder kann man das ggf. gleich direkt mit der Variable %9 realisieren ?
Diese Uhrzeit soll dann als Systemzeit gesetzt werden.
Die Synchronisierung der Systemzeit mit einem Timeserver wurde schon deaktiviert.
Ich wollte mir jetzt eine kleine Batch schreiben welche halt die Zeit ausliest / schreibt oder verarbeitet und dann ggf. eine zweite Batch welche die Systemzeit dann setzt. Diese zweite Batch dann mittels Taskplan jede stunde einmal ausführen lassen ?!
Mein aktueller Ansatz sieht so aus:
[code]
@echo off
set zeit=00:00:00
time %zeit%
EXIT
[/code]
Es müsste jetzt irgendwie das Datum aus dem Parameter %9 wegfallen damit ich denn gleich für %zeit% ersetzen könne ?!
Vielen dank für jeden Tipp !
MFG Beatzler
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 132848
Url: https://administrator.de/contentid/132848
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
24 Kommentare
Neuester Kommentar
Hallo Beatzler
07.01.2010 01:45:38 wären (wegen des Leerzeichens) bereits zwei Parameter. Falls das in dieser Form bei dir ankommt, wäre das ja kein Problem, oder?
Aber gehen wir davon aus, dass das ganze in Anführungszeichen steht und so ankommt: "07.01.2010 01:45:38".
Konstruieren wir mal zwei Batches:
Aufruf.bat macht das, was der Name sagt. Beim Aufruf werden 9 Parameter an Systime.bat übergeben. P1 bis P8 stehen dabei für die von dir nicht genannten Parameter.
Durch das ECHO vor dem time-Befehl wird dir zunächst nur angezeigt, was eigentlich passieren würde.
Grüße
rubberman
07.01.2010 01:45:38 wären (wegen des Leerzeichens) bereits zwei Parameter. Falls das in dieser Form bei dir ankommt, wäre das ja kein Problem, oder?
Aber gehen wir davon aus, dass das ganze in Anführungszeichen steht und so ankommt: "07.01.2010 01:45:38".
Konstruieren wir mal zwei Batches:
:: Aufruf.bat
@echo off &setlocal
Systime.bat P1 P2 P3 P4 P5 P6 P7 P8 "07.01.2010 01:45:38"
:: Systime.bat
@echo off &setlocal
for /f "tokens=2" %%a in ("%~9") do ECHO time %%a
pause
Aufruf.bat macht das, was der Name sagt. Beim Aufruf werden 9 Parameter an Systime.bat übergeben. P1 bis P8 stehen dabei für die von dir nicht genannten Parameter.
Durch das ECHO vor dem time-Befehl wird dir zunächst nur angezeigt, was eigentlich passieren würde.
Grüße
rubberman
Hallo Beatzler.
Soweit ich weiß akzeptiert der TIME Befehl nur das in der Registry angegebene Format. Wenn du also versuchst, nur Stunden und Minuten zu ändern, sollte das zu einem Fehler führen. Kannst ja mal testen.
Zur anderen Sache. Die Lösung mit der FOR Schleife ist nur eine von mehreren Möglichkeiten. Denkbar wäre auch:
Ich hoffe dass ich mich nicht verzählt habe
nach dem 11. Zeichen werden die folgenden 8 der Variablen %newtime% zugewiesen.
Grüße
rubberman
Zitat von @Beatzler:
Wäre es jetzt ggf. irgendwie noch relativ einfach möglich nur die stunden und minuten als Systemzeit zu verwenden, da
während der Abarbeitung ja die Sekunden schon wieder zu schnell verstreichen ...
Wäre es jetzt ggf. irgendwie noch relativ einfach möglich nur die stunden und minuten als Systemzeit zu verwenden, da
während der Abarbeitung ja die Sekunden schon wieder zu schnell verstreichen ...
Soweit ich weiß akzeptiert der TIME Befehl nur das in der Registry angegebene Format. Wenn du also versuchst, nur Stunden und Minuten zu ändern, sollte das zu einem Fehler führen. Kannst ja mal testen.
Zur anderen Sache. Die Lösung mit der FOR Schleife ist nur eine von mehreren Möglichkeiten. Denkbar wäre auch:
:: Systime.bat
@echo off &setlocal
set "datetime=%~9"
set "newtime=%datetime:~11,8%"
ECHO time %newtime%
pause
nach dem 11. Zeichen werden die folgenden 8 der Variablen %newtime% zugewiesen.
Grüße
rubberman
Hallo Beatzler.
Sorry, hab erst jetzt gesehen, dass du hier noch mal gepostet hast.
Zum Thema. Du kannst den FINDSTR Befehl nutzen. Der versteht etwas RegEx.
Diese Zeile beendet den Batch, wenn die Zeichenfolge nicht dem vorgesehenen Format entspricht.
Funktioniert in der Form aber nur bis zum Ende des Jahres 2999
Grüße
rubberman
Sorry, hab erst jetzt gesehen, dass du hier noch mal gepostet hast.
Zum Thema. Du kannst den FINDSTR Befehl nutzen. Der versteht etwas RegEx.
echo %~9|findstr /r /c:"^[0-3][0-9]\.[01][0-9]\.2[0-9][0-9][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$">nul||goto :eof
Diese Zeile beendet den Batch, wenn die Zeichenfolge nicht dem vorgesehenen Format entspricht.
Funktioniert in der Form aber nur bis zum Ende des Jahres 2999
Grüße
rubberman
Hallo Beatzler.
Mit den unmöglichsten Verrenkungen geht das vielleicht. Batch kann nicht mit DateTime-Werten rechnen. Das bedeutet, du musst immer prüfen, ob du mit der Minute über die Tages-, Monats- oder Jahresgrenze kommst. Jetzt denk mal an den Februar, der mal 28 und mal 29 Tage haben kann. Kurz gesagt: Batch ist hier eher letzte Wahl.
Implementiere ein kleines VBSCript in den Batch:
Wenn du die 1 zu -1 änderst, wird eine Minute abgezogen.
Grüße
rubberman
Zitat von @Beatzler:
Wäre es jetzt aber ggf. auch noch irgendwie möglich das man aus der ausgewerteten Systemzeit / Datum ( %9 ) Die Zeit um
eine Minute vor bzw. zurückstellen kann ( also entweder oder ... ) ??
Wäre es jetzt aber ggf. auch noch irgendwie möglich das man aus der ausgewerteten Systemzeit / Datum ( %9 ) Die Zeit um
eine Minute vor bzw. zurückstellen kann ( also entweder oder ... ) ??
Mit den unmöglichsten Verrenkungen geht das vielleicht. Batch kann nicht mit DateTime-Werten rechnen. Das bedeutet, du musst immer prüfen, ob du mit der Minute über die Tages-, Monats- oder Jahresgrenze kommst. Jetzt denk mal an den Februar, der mal 28 und mal 29 Tage haben kann. Kurz gesagt: Batch ist hier eher letzte Wahl.
Implementiere ein kleines VBSCript in den Batch:
@echo off & setlocal
set "vbs=%temp%\AddMin.vbs"
>%vbs% echo WScript.Echo FormatDateTime(DateAdd("n", WScript.Arguments(1), WScript.Arguments(0)), 0)
for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" 1') do set "newTime=%%i"
del %vbs%
echo %newTime%
pause
Grüße
rubberman
Moin Beatzler,
würde es etwas helfen, wenn du die Variable auch verwendest?
Hier jedenfalls in deiner Zeile 11:
Grüße
Biber
würde es etwas helfen, wenn du die Variable auch verwendest?
Hier jedenfalls in deiner Zeile 11:
ECHO Letze Ausfuehrung: %9 > C:\Systemzeit\Log.txt
... nutzt du sie noch nicht, sonst müsste die Zeile ja sinngemäß so aussehen:ECHO Letzte Ausfyhrung: %newTime% > C:\Systemzeit\Log.txt
Grüße
Biber
Moin Beatzler,
ich bin nicht sicher, ob du jetzt auch alle Codefragmente in der richtigen Reihenfolge zusammengeklöppelt hast...
Der Ablauf insgesamt sollte so sein:
Hast du bei dir auch ALLE diese Schritte und auch in dieser Reihenfolge?
Grüße
Biber
ich bin nicht sicher, ob du jetzt auch alle Codefragmente in der richtigen Reihenfolge zusammengeklöppelt hast...
Der Ablauf insgesamt sollte so sein:
- irgendwo aus den Weiten des Weltalls wird neben vielem anderen Strandgut als Parameter 9 (%9) eine "Zeit"-Angabe mit in den Batch gespült
- was auch immer mit den Parametern %1-%8 passieren mag, haben wir nicht diskutiert....aber wenn diese verarbeitung durch ist...
- dann wird der Parameter %9 formal geprüft und wenn kein Fehler auftritt (dann würde "Goto exit" wirken)
- wenn also kein Fehler, dann wird aus Parameter %9 nach Abziehen/Draufschlagen einer Minute die Variable %newtime%
- und eigentlich müssste doch auch in irgendeinem Prozessschritt, in irgendeiner Phase diese %newtime% zum Setzen der Zeit verwendet werden? Wo machst du das denn?
- erst als letztes kannst du dann diese neu gesetzte Zeit (diedann auch in der Variable %time% steht in dein Log-Krams schreiben.
Hast du bei dir auch ALLE diese Schritte und auch in dieser Reihenfolge?
Grüße
Biber
Hallo Beatzler!
wird bei einem Aufruf mit den Parametern
bei mir folgende Ausgabe erzeugt:
Grüße
bastla
Bastla´s ergänzung habe ich angepasst, leider ohne Erfolg
Mit:: Systime.bat
@echo off &setlocal
echo %~9|findstr /r /c:"^[0-3][0-9]\.[01][0-9]\.2[0-9][0-9][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]$">nul||goto EXIT
set "vbs=%temp%\AddMin.vbs"
>%vbs% echo WScript.Echo FormatDateTime(DateAdd("n", WScript.Arguments(1), WScript.Arguments(0)), 0)
for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" -1') do set "newTime=%%i"
del %vbs%
ECHO Letze Ausfuehrung: %newTime%
:EXIT
1 2 3 4 5 6 7 8 "22.02.2010 14:56:40"
Letze Ausfuehrung: 22.02.2010 14:55:40
bastla
Hallo Beatzler!
Grüße
bastla
nimm den 2. Teil hinter dem leerzeichen von %newtime% ( also nur noch die Zeit ) als j und setze die Zeit richtig ?
Es werden Datum und Zeit gesetzt (wenn es schon mal ein kompletter Timestamp ist) - um tatsächlich nur die Zeit zu setzen:for /f "tokens=2" %%i in ("%newtime%") do time %%i
bastla