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

Win Systemzeit aus Variable oder Textdatei setzen lassen

Frage Entwicklung Batch & Shell

Mitglied: Beatzler

Beatzler (Level 1) - Jetzt verbinden

07.01.2010 um 01:36 Uhr, 6020 Aufrufe, 24 Kommentare

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 !

Mit freundlichen Grüßen Beatzler
Mitglied: rubberman
07.01.2010 um 02:42 Uhr
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:

01.
:: Aufruf.bat 
02.
@echo off &setlocal 
03.
Systime.bat P1 P2 P3 P4 P5 P6 P7 P8 "07.01.2010 01:45:38"
01.
:: Systime.bat 
02.
@echo off &setlocal 
03.
for /f "tokens=2" %%a in ("%~9") do ECHO time %%a 
04.
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
Bitte warten ..
Mitglied: Beatzler
07.01.2010 um 22:15 Uhr
Hey rubberman,

vielen dank für deine Hilfe

Das klappt wunderbar, perfekt !!!

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 ...

ausserdem kommt manchmal direkt hinter den Sekunden noch ein Fixtext den der Time Befehl dann natürlich nicht mag...

Vielen Dank dir erstmal !

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: rubberman
07.01.2010 um 22:43 Uhr
Hallo Beatzler.

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 ...

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:
01.
:: Systime.bat 
02.
@echo off &setlocal 
03.
set "datetime=%~9" 
04.
set "newtime=%datetime:~11,8%" 
05.
ECHO time %newtime% 
06.
pause
Ich hoffe dass ich mich nicht verzählt habe
nach dem 11. Zeichen werden die folgenden 8 der Variablen %newtime% zugewiesen.

Grüße
rubberman
Bitte warten ..
Mitglied: Beatzler
07.01.2010 um 22:48 Uhr
Hey,

okay danke für den Hinweis wenn ich bei time nur z.B. 00:00 eingebe und die Sekunden weglasse setzt er diese ebenfalls automatisch auch auf 00.

Ich denke ich werde es so belassen und dann die komplette Zeit übergeben auf die paar sekunden kommt es dann erstmal auch nicht mehr an ...

Vielen Dank für deine Hilfe !

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: Beatzler
02.02.2010 um 10:47 Uhr
Hey,

diesbezüglich nochmals eine kurze Frage.

Wäre es irgendwie relativ einfach möglich eine Art überprüfung einzubauen das nur die Zeit aktualisiert wird wenn %9 vollständig ist ?

Das heißt wenn alle Stellen im ausgegebenen Format vorhanden sind z.B. so: 07.01.2010 01:45:38 und wenn dann z.B. nur das Datum in %9 steht oder irgendwo anders eine Zahl / Stelle fehlt das dann nicht die Systemzeit anpassung ausgeführt wird.

Aktueller Code: ( dank eurer Hilfe )

01.
ECHO Letze Ausfuehrung: %9 > C:\Systemzeit\Log.txt 
02.
 
03.
for /f "tokens=2" %%a in ("%~9") do ECHO %%a > C:\Systemzeit\Zeit.txt 
04.
 
05.
cscript //nologo C:\Systemzeit\Uhrfilter.vbs "C:\Systemzeit\Zeit.txt" 
06.
 
07.
for /f "delims=; " %%i in (C:\Systemzeit\Zeit.txt) do time %%i 
08.
 
09.
DEL C:\Systemzeit\Zeit.txt 
10.
EXIT
Vielen Dank im vorraus!

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: rubberman
09.02.2010 um 01:32 Uhr
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.

01.
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
Bitte warten ..
Mitglied: Beatzler
09.02.2010 um 12:32 Uhr
Hey,

vielen Dank für deine Antwort

Ich werde es einbauen und prüfen !

Dankeschön

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: Beatzler
19.02.2010 um 09:55 Uhr
Hey Rubberman,

vielen dank nochmals für deine Super Hilfe ! Das klappt soweit genauso wie zunächst vorgesehen.

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 ... ) ??

Bekomms selber einfach nicht hin

Danke für einen Tipp !


Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: rubberman
20.02.2010 um 01:54 Uhr
Hallo Beatzler.

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 ... ) ??

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:
01.
@echo off & setlocal 
02.
 
03.
set "vbs=%temp%\AddMin.vbs" 
04.
>%vbs% echo WScript.Echo FormatDateTime(DateAdd("n", WScript.Arguments(1), WScript.Arguments(0)), 0) 
05.
for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" 1') do set "newTime=%%i" 
06.
del %vbs% 
07.
 
08.
echo %newTime% 
09.
 
10.
pause
Wenn du die 1 zu -1 änderst, wird eine Minute abgezogen.

Grüße
rubberman
Bitte warten ..
Mitglied: Beatzler
20.02.2010 um 16:50 Uhr
Hey,

das sieht super aus !! Echt klasse, vielen Dank !!

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: Beatzler
22.02.2010 um 13:17 Uhr
Hey rubberman,

danke nochmals fürs skript aber ich glaube ich habe etwas falsch gemacht, irgendwie klappt es nicht so ganz, die Zeit wird zwar gesetzt aber es wird nicht um eine Minute verstellt:

01.
:: Systime.bat 
02.
@echo off &setlocal 
03.
 
04.
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 
05.
 
06.
set "vbs=%temp%\AddMin.vbs" 
07.
>%vbs% echo WScript.Echo FormatDateTime(DateAdd("n", WScript.Arguments(-1), WScript.Arguments(0)), 0) 
08.
for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" -1') do set "newTime=%%i" 
09.
del %vbs% 
10.
 
11.
ECHO Letze Ausfuehrung: %9 > C:\Systemzeit\Log.txt  
12.
 
13.
:EXIT 
14.
EXIT
Vielen Dank für deinen Tipp....

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: Biber
22.02.2010 um 14:12 Uhr
Moin Beatzler,

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
Bitte warten ..
Mitglied: Beatzler
22.02.2010 um 14:21 Uhr
Hey,

stimmt okay das war nicht sehr klug

habs nun gegen ECHO %time% ersetzt dann gibt er mir ja die aktuell verwendete Systemzeit aus...

Aber leider ändert das ja nichts daran das %9 immer noch genauso gesetzt wird ohne eine Minute abzuziehen oder hinzuzufügen.


Danke für jeden Tipp diesbezüglich !

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: Biber
22.02.2010 um 14:55 Uhr
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:

  • 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
Bitte warten ..
Mitglied: bastla
22.02.2010 um 14:59 Uhr
Hallo Beatzler!

Abgesehen von Bibers Anmerkungen: In dieser Zeile ist "-1" kontraproduktiv - lass das Minus weg:
>%vbs% echo WScript.Echo FormatDateTime(DateAdd("n", WScript.Arguments(-1), WScript.Arguments(0)), 0)
Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
22.02.2010 um 15:08 Uhr
Hallo ihr beiden,

vielen dank zunächst für eure Hilfe & Antworten !

Also Parameter 1-8 werden nicht benötigt, parameter 9 ist Datum und Zeit in einem mit Leerzeichen getrennt = "22.02.2010 14:56:40"

Eigentlich gibt es in meiner Batch auch nicht wirklich mehr als in den zuletzt von mir geposteten Quellcode....


Bastla´s ergänzung habe ich angepasst, leider ohne Erfolg.



Zitat von Biber:

* dann wird der Parameter %9 formal geprüft und wenn kein Fehler auftritt (dann würde "Goto exit" wirken)

Es sollte nur zu EXIT gegangen werden wenn Fehler auftreten also wenn z.B. eine einzelne Zahl in den Werten fehlt oder nur Datum / Zeit ausgegeben werden, damit nicht eine falsche Zeit gesetzt wird.


Ich denke dochmal das %newtime% durch diese Zeile gesetzt wird oder nicht ?

01.
for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" -1') do set "newTime=%%i" 
Danke nochmals Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: Beatzler
22.02.2010 um 15:15 Uhr
Achso ja jetzt verstehe ich was du meintest Biber!

Habe mal die besagte Zeitsetzungszeile folgendermaßen angepasst und teste / warte grade ob es so klappt:

for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" -1') do time %%i
Bitte warten ..
Mitglied: bastla
22.02.2010 um 15:19 Uhr
Hallo Beatzler!
Bastla´s ergänzung habe ich angepasst, leider ohne Erfolg
Mit
01.
:: Systime.bat 
02.
@echo off &setlocal 
03.
 
04.
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 
05.
 
06.
set "vbs=%temp%\AddMin.vbs" 
07.
>%vbs% echo WScript.Echo FormatDateTime(DateAdd("n", WScript.Arguments(1), WScript.Arguments(0)), 0) 
08.
for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" -1') do set "newTime=%%i" 
09.
del %vbs% 
10.
 
11.
ECHO Letze Ausfuehrung: %newTime% 
12.
 
13.
:EXIT
wird bei einem Aufruf mit den Parametern
1 2 3 4 5 6 7 8 "22.02.2010 14:56:40"
bei mir folgende Ausgabe erzeugt:
Letze Ausfuehrung: 22.02.2010 14:55:40
Grüße
bastla
Bitte warten ..
Mitglied: bastla
22.02.2010 um 15:27 Uhr
Hallo Beatzler!

Wenn Du den berechneten Zeitpunkt dann auch noch in das Log schreiben, willst eher so:
01.
for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" -1') do set "newTime=%%i" 
02.
for /f "tokens=1-2" %%i in ("%newtime%") do date %%i & time %%j
Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
22.02.2010 um 15:35 Uhr
Mhhh also irgendwie klappt das alles noch nicht

Das Logfile ist erstmal nicht so wichtig, aber die Zeitumsetzung um 1 Minute vor oder zurück klappt leider immer nocht nicht

wenn ich es so mache: for /f "delims=" %%i in ('cscript //nologo %vbs% "%~9" -1') do time %%i übernimmt er gar nichts mehr und fragt die korrekte Zeit ab.

Wie setze ich denn nun den aktualisierten Zeitwert ( z.B. um eine Minute weniger ) richtig als Systemzeit ?!

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: bastla
22.02.2010 um 16:30 Uhr
Hallo Beatzler!

Dass
time 22.02.2010 14:55:40
nicht funktionieren kann, ist klar - deshalb zB so wie gleich oberhalb gezeigt ...

Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
24.02.2010 um 09:43 Uhr
Hey,

also erstmal nochmal danke für eure Geduld und Unterstützung hier

Leider habe ich es jetzt immer noch nicht so ganz hinbekommen....

Aktuelles Problem ist noch das wie bastla schon sagte an time ja Datum UND Zeit übergeben wird obwohl es ja nur die Zeit sein muss ....

Nun vermute ich mal das du diese Zeile meintst :

for /f "tokens=1-2" %%i in ("%newtime%") do date %%i & time %%j

und deute sie so: nimm den 2. Teil hinter dem leerzeichen von %newtime% ( also nur noch die Zeit ) als j und setze die Zeit richtig ?


Mit freundlichen Grüßen Beatzler
Bitte warten ..
Mitglied: bastla
24.02.2010 um 09:55 Uhr
Hallo Beatzler!
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
Grüße
bastla
Bitte warten ..
Mitglied: Beatzler
24.02.2010 um 12:11 Uhr
Hey,

fragt mich nicht wieso aber damit klappt es nun einwandfrei und wie gewünscht

VIelen Dank !!!

Mit freundlichen Grüßen Beatzler
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Variable setzen können während timeout (3)

Frage von DontFlameMeITryMyBest zum Thema Batch & Shell ...

Visual Studio
gelöst VBS schreibt bestimmte Variable nicht in Textdatei (11)

Frage von Saschaaaaa zum Thema Visual Studio ...

JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...