Internationales Datum und Zeitzone bestimmen
Hilfe bei kleinem Batchscript benötigt.
Ich möchte in eine Datei das Datum inkl. Wochentag und Uhrzeit schreiben.
Die deutsche Version ist auch fertig, nur die englische bereitet mir noch Probleme.
Wie kann ich das Datum als MM-TT-YYYY statt TT.MM.YYYY ausgeben lassen ohne die Tastatur oder sonstige Regionaleinstellungen zu ändern?
Der bisherige Code sieht so aus:
Ergebnis:
Zusätzlich sollte auch die Zeit im zwölf Stunden Format angezeigt werden (geht immer nur um die ZeitEn.cfg) und würde man das im Englischen überhaupt so formulieren?
Als letzter Punkt wäre noch interessant wenn UTC+1 oder UTC+2 angegeben werden kann, je nachdem ob gerade Sommerzeit herrscht oder nicht.
Danke für Hilfe.
Ich möchte in eine Datei das Datum inkl. Wochentag und Uhrzeit schreiben.
Die deutsche Version ist auch fertig, nur die englische bereitet mir noch Probleme.
Wie kann ich das Datum als MM-TT-YYYY statt TT.MM.YYYY ausgeben lassen ohne die Tastatur oder sonstige Regionaleinstellungen zu ändern?
Der bisherige Code sieht so aus:
FOR /F "tokens=1,2,3 delims=." %%a in ('echo %date%') do set yy=%%c & set mm=%%b & set dd=%%a
set /a "TwoDigitYearMax=2038%%1000"
if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a zDe=14-mm,zDe/=12,y=yy+4800-zDe,m=mm+12*zDe-3,dowDe=153*m+2
set /a dowDe=dowDe/5+dd+y*365+y/4-y/100+y/400-2472630,dowDe%%=7,dowDe+=1
set /a zEn=14-mm,zEn/=12,y=yy+4800-zEn,m=mm+12*zEn-3,dowEn=153*m+2
set /a dowEn=dowEn/5+dd+y*365+y/4-y/100+y/400-2472630,dowEn%%=7,dowEn+=1
If %dowDe% equ 1 set "WoTaDe=Montag"
If %dowDe% equ 2 set "WoTaDe=Dienstag"
If %dowDe% equ 3 set "WoTaDe=Mittwoch"
If %dowDe% equ 4 set "WoTaDe=Donnerstag"
If %dowDe% equ 5 set "WoTaDe=Freitag"
If %dowDe% equ 6 set "WoTaDe=Samstag"
If %dowDe% equ 7 set "WoTaDe=Sonntag"
If %dowEn% equ 1 set "WoTaEn=Monday"
If %dowEn% equ 2 set "WoTaEn=Tuesday"
If %dowEn% equ 3 set "WoTaEn=Wednesday"
If %dowEn% equ 4 set "WoTaEn=Thursday"
If %dowEn% equ 5 set "WoTaEn=Friday"
If %dowEn% equ 6 set "WoTaEn=Saturday"
If %dowEn% equ 7 set "WoTaEn=Sunday"
rem // Erstellt zeit.cfg + gibt das aktuelle Datum und die aktuelle Zeit an.
echo say Es ist %WoTaDe%, der %date% um %time:~0,8% Uhr in Deutschland > ZeitDe.cfg
echo say It ist %WoTaEn%, the %date% at %time:~0,8% clock in Germany > ZeitEn.cfg
Ergebnis:
say Es ist Sonntag, der 15.06.2008 um 1:01:38 Uhr in Deutschland
say It ist Sunday, the 15.06.2008 at 1:01:38 clock in Germany
Zusätzlich sollte auch die Zeit im zwölf Stunden Format angezeigt werden (geht immer nur um die ZeitEn.cfg) und würde man das im Englischen überhaupt so formulieren?
Als letzter Punkt wäre noch interessant wenn UTC+1 oder UTC+2 angegeben werden kann, je nachdem ob gerade Sommerzeit herrscht oder nicht.
Danke für Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 24.03.2010 um 20:28:24 Uhr
Habe diesen Beitrag heute auf "gelöst" gesetzt.
Eigentlich ist das ja fast ein Teil 4 des "Batch for Runaways"-Wokshops geworden... der sollte auch auf "benutzer.de" sichtbar sein.
Eigentlich ist das ja fast ein Teil 4 des "Batch for Runaways"-Wokshops geworden... der sollte auch auf "benutzer.de" sichtbar sein.
Content-ID: 90078
Url: https://administrator.de/contentid/90078
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
14 Kommentare
Neuester Kommentar
Moin DaSilva,
Rückfragen:
[Zu 1 und 2: In deinem Skriptchen gehst Du ja davon aus, dass das deutsche XP-Datumsformat gegeben ist; bei W2000 oder bei englischem Datumsformat würde die %date%-Auswertung ja nicht laufen.]
Grüße
Biber
Rückfragen:
- soll das Skript nur auf deinem Rechner laufen oder auf "beliebigen"?
- falls "beliebig": Betriebssystem W2K/XP/Vista und mal als DE, mal als US-Version?
- WhoThe... wer bitte erwartet von Dir die Info, ob auf dem Rechner automatisch Sommerzeit angezeigt wird???? Wo das in der Registry steht, weiß außerhalb von Redmond eine Handvoll
SpinnerEntwickler.
[Zu 1 und 2: In deinem Skriptchen gehst Du ja davon aus, dass das deutsche XP-Datumsformat gegeben ist; bei W2000 oder bei englischem Datumsformat würde die %date%-Auswertung ja nicht laufen.]
Grüße
Biber
Moin DaSilva,
danke Dir für die aufmunternde Sommerzeit-Definition....
Aber leider kann man/frau im Batch keine Datumsberechnungen machen.
Es gibt schlicht und einfach keinen Datentyp "Datum" im CMD-Interpreter.
Siehe oben bei den Verrenkungen, die Du zur Wochentagsberechnung machen musstest.
Also: ich sehe drei oder vier Möglichkeiten:
Was die GMT/UTC-Abweichung/Berechnung betrifft... geht nur entweder über Registry (was ich mir grad noch zutraue) oder über dubiose Win-API-Calls von GetTimeToLocalTime() oder so ähnlich. Was ich nicht freiwillig für eine Benutzer-Display-Meldung anfasse.
Lohnen sich Aufwand und Nutzen?
Grüße
Biber
[Edit Biber 21.06.2008]
Recommended - was wohl nicht so herauskam - ist der Weg über Utilities, "die das können". Z.B. Now.exe aus dem ResKit oder ein Tool wie ShowDate vom geschätzten Forumsmitglied Axel Hahn, s.u. Links in "Batch und Shell".
Alle folgenden Kommentare haben eher Workshop-Charakter und sind nicht unbedingt Empfehlungen für produktive Lösungen.
[/Edit]
danke Dir für die aufmunternde Sommerzeit-Definition....
Aber leider kann man/frau im Batch keine Datumsberechnungen machen.
Es gibt schlicht und einfach keinen Datentyp "Datum" im CMD-Interpreter.
Siehe oben bei den Verrenkungen, die Du zur Wochentagsberechnung machen musstest.
Also: ich sehe drei oder vier Möglichkeiten:
- Im obigen Batch das angelsächsische Datumsformat durch Substring-Funktionen bezogen auf die (vermutlichen) TAG und MONAT-Werte hinfrickeln. Wird dann vollkommen irrwitzig, wenn Du diesen Batch dann auf einem EN- oder US-sprachigen W2000-Rechner startest
- Im Anfang irgendwie das Datum via Utility "sprachunabhängig" ermitteln lasssen. Zum Beispiel das Now.exe aus dem ResKit kann so etwas.
- oder alles ohne Drittutilities mit Batch/Reg.exe aus/mit der Registry abfackeln.
Was die GMT/UTC-Abweichung/Berechnung betrifft... geht nur entweder über Registry (was ich mir grad noch zutraue) oder über dubiose Win-API-Calls von GetTimeToLocalTime() oder so ähnlich. Was ich nicht freiwillig für eine Benutzer-Display-Meldung anfasse.
Lohnen sich Aufwand und Nutzen?
Grüße
Biber
[Edit Biber 21.06.2008]
Recommended - was wohl nicht so herauskam - ist der Weg über Utilities, "die das können". Z.B. Now.exe aus dem ResKit oder ein Tool wie ShowDate vom geschätzten Forumsmitglied Axel Hahn, s.u. Links in "Batch und Shell".
Alle folgenden Kommentare haben eher Workshop-Charakter und sind nicht unbedingt Empfehlungen für produktive Lösungen.
[/Edit]
Na ja, DaSilva,
ich will ja nicht, dass Du so betrübt ins Wochenende gehst...
Bezüglich der Zeitzonen-Infos hab ich noch mal schnell was zusammengeharkt.
Wenn Du XP/Vista hast und die Reg.exe (ist Standard bei denen) und auf HKLM zugreifen kannst, dann tut es dieser Schnipsel.
Output:
... wobei, wenn ich die Registry-Werte richtig interpretiere dort für meinen Rechner herauskommen müsste, dass er momentan 1 Stunde zur GMT-Zeit versetzt + 1 Stunde wg. Sommerzeit vorgestellt ist, also [Zeile Act-Differenz] alles in Allem +2 Std Differenz vorzuweisen hat.
Grüße
Biber
ich will ja nicht, dass Du so betrübt ins Wochenende gehst...
Bezüglich der Zeitzonen-Infos hab ich noch mal schnell was zusammengeharkt.
Wenn Du XP/Vista hast und die Reg.exe (ist Standard bei denen) und auf HKLM zugreifen kannst, dann tut es dieser Schnipsel.
@echo off & setlocal
:: optional ....Summertime.... and the living is easy...
:: Geht natürlich nur mit Rechten auf HKLM...
Set regkey="HKLM\System\CurrentControlSet\Control\TimeZoneInformation"
call :SaveOldValue ActiveTimeBias
call :SaveOldValue DaylightBias
call :SaveOldValue StandardName
call :SaveOldValue DaylightName
call :SaveOldValue Bias
If defined old_Bias Set /a GMTdiff= %old_Bias% / -60
If defined old_ActiveTimeBias Set /a Actdiff= %old_ActiveTimeBias% / -60
If defined old_DayLightBias Set /a UTCdiff= %old_DaylightBias% / -60
:: -----------
If defined ActDiff echo Act-Differenz in Stunden plus/minus: [All+%ActDiff%]
if defined old_StandardName Echo Zeitzone: %old_StandardName%
if defined old_DaylightName Echo Sommerzeit: %old_DaylightName%
If defined GMTDiff echo GMT-Differenz in Stunden plus/minus: [GMT+%GMTDiff%]
If defined UTCDiff echo UTC-Differenz in Stunden plus/minus: [UTC+%UTCDiff%]
goto :eof
~~~~~~~~~ [End of bätschelchen]
:SetNewvalue param1=wert param2=value in Anfü-Zeichen
reg add %regkey% /v "%~1" /d "%~2" /f >nul
goto :eof
:SaveOldValue param1=regValue
REM Anmerkung: wenn es den Wert nicht gibt oder keine Rechte darauf,
REM dann kommt keine Fehlermeldung, aber die Variable ist nicht definiert.
For /f "tokens=2*" %%i in ('reg query %regkey% /v "%~1" ^2^>nul^|findstr /i "%~1"') do (
set "old_%1=%%j"
)
goto :eof
Output:
>e:\schnipsel\GetTimezones.cmd
Act-Differenz in Stunden plus/minus: [All+2]
Zeitzone: Westeuropäische Normalzeit
Sommerzeit: Westeuropäische Normalzeit
GMT-Differenz in Stunden plus/minus: [GMT+1]
UTC-Differenz in Stunden plus/minus: [UTC+1]
... wobei, wenn ich die Registry-Werte richtig interpretiere dort für meinen Rechner herauskommen müsste, dass er momentan 1 Stunde zur GMT-Zeit versetzt + 1 Stunde wg. Sommerzeit vorgestellt ist, also [Zeile Act-Differenz] alles in Allem +2 Std Differenz vorzuweisen hat.
Grüße
Biber
Moin DaSilva,
natürlich ist es möglich... alles außer Brotschneiden geht per Batch.
Nur die Strategie ist die Frage - siehe oben, wo ich mich über mögliche Wege ausgelassen habe.
Das Datumsermittlung im Windows-Batch ist ja nicht nur zwei-, sondern eher schon dreischneidig.
In meinem Workshop "Batch for Runaways III" (siehe unten unter mögliche Anleitungen) hatte ich noch geschrieben, ich muss halt das "unstruktierte" und beliebige Datums/Zeitformat normalisieren, das mir vom Tisch des sympathischen Weltmarktführers in den Schoß bzw. in den Batch fällt
Shice drauf. Sehe ich lockerer inzwischen.
Jetzt schiesse ich halt das Datumsformat selber per Registry um und bekomme dann Tage, Monate, Jahre und auch Wochentage wann und wo ich will.
Und hinterher stelle ich den alten Zustand wieder her.
Beispiel.
Output dieses Schnipsels:
[--vorsichtig testen und nicht blind verkaufen-- ist nur schnell zusammengeschrotet]
Die ganze Wochentagsberechnung z.B spar ich mit, indem ich einfach das datums-Anzeigeformat auf "ddd" setze statt das "dd.MM.yyyy" hinzunehmen.
Siehe in Zeile 33ff.
So bekomme ich bei einem "date /t" die Ausgabe "Fr"... *g
Aber ich gebe zu, dass so ein Vorgehen natürlich kein Professionelles ist.
...kann auch gut damit leben....
Grüße
Biber
[Edit] Umgang mit vorhandenen {leeren} Registry-Werten geändert - setNewValue/SaveOldValue angepasst. Siehe unten. [/Edit]
natürlich ist es möglich... alles außer Brotschneiden geht per Batch.
Nur die Strategie ist die Frage - siehe oben, wo ich mich über mögliche Wege ausgelassen habe.
Das Datumsermittlung im Windows-Batch ist ja nicht nur zwei-, sondern eher schon dreischneidig.
- Erstens kennt die CMD.exe keine Datums-Arithmetik. Alles ist "Text".
- Zweitens bekommst Du, wenn Du am CMD-Prompt nach Datum und Zeit fragst, irgendetwas menschenlesbares (mit/ohne Wochentag abgekürzt oder ausgeschrieben, in der Reihenfolge TTMMJJJJ oder MM/DD/YYYY oder als YYYY-MM-DD... ) und Du weißt nicht was Du bekommst
- Drittens ist diese ganze "Regions- und Spracheinstellung"-Arie so dermaßen zusammengeschlampert von den redmonder Praktikanten, dass ich mittlerweile auch so wesentlich brutaleren Methoden bei der Datumsermittlung greife als M$ sich trauen würde.
In meinem Workshop "Batch for Runaways III" (siehe unten unter mögliche Anleitungen) hatte ich noch geschrieben, ich muss halt das "unstruktierte" und beliebige Datums/Zeitformat normalisieren, das mir vom Tisch des sympathischen Weltmarktführers in den Schoß bzw. in den Batch fällt
Jetzt schiesse ich halt das Datumsformat selber per Registry um und bekomme dann Tage, Monate, Jahre und auch Wochentage wann und wo ich will.
Und hinterher stelle ich den alten Zustand wieder her.
Beispiel.
:: -----------Snipp GetEnDeCfg.cmd
:: Biber 2008 als Fussnote zum Workshop Batch 4 Runaways III"
:: "Umgang mit Datums- und Zeitvariablen im Batch"
@echo off & setlocal
REM Achtung: Unter W2000 _kein_ Fehler, aber auch kein sichtbarer Effekt
REM Die sofortige Nutzbarkeit der neuen Date/t und Time/t-Reg-Settings erst ab XP
set regkey="HKEY_CURRENT_USER\Control Panel\International"
call :SaveOldValue sShortdate
call :SaveOldValue s1159
call :SaveOldValue s2359
call :SaveOldValue sTimeFormat
REM unused call :SaveOldValue iDate
REM unused call :SaveOldValue iTime
For %%i in (sShortDate s1159 s2359 sTimeformat) do @(
if not defined old_%%i (
@echo Fehler: %regkey% value "%%i" nicht gefunden
pause
goto :eof
)
)
:: set old_ <--- uncomment here for debug
:: würde diese nächsten Zeilen anzeigen
:: old_sShortdate=dd.MM.yyyy
:: old_iDate=1
:: old_s1159=AM
:: old_s2359=PM
:: old_sTimeFormat=HH:mm:ss
:: Originaldatum/zeit sichern
For /f "delims=" %%i in ('time/t') do set "xyTime=%%i"
For /f "delims=" %%i in ('date/t') do set "xyDate=%%i"
:: mal M$ einen freundlichen Gruß senden :-P
:: ..."coden wie ein Redmonder" ....muahaha...
call :SetNewValue sShortdate "ddd"
For /f %%i in ('date/t') do set "WoTach=%%i"
:: na...mitbekommen, was ich eben gemacht habe??
If "%WoTach%" equ "Mo" set "WoTaDe=Montag" & set "WoTaEn=Monday"
If "%WoTach%" equ "Di" set "WoTaDe=Dienstag" & set "WoTaEn=Tuesday"
If "%WoTach%" equ "Mi" set "WoTaDe=Mittwoch" & set "WoTaEn=Wednesday"
If "%WoTach%" equ "Do" set "WoTaDe=Donnerstag" & set "WoTaEn=Thursday"
If "%WoTach%" equ "Fr" set "WoTaDe=Freitag" & set "WoTaEn=Friday"
If "%WoTach%" equ "Sa" set "WoTaDe=Samstag" & set "WoTaEn=Saturday"
If "%WoTach%" equ "So" set "WoTaDe=Sonntag" & set "WoTaEn=Sunday"
if defined WoTaDe goto :allesEasy
If "%WoTach%" equ "Mon" set "WoTaDe=Montag" & set "WoTaEn=Monday"
If "%WoTach%" equ "Thu" set "WoTaDe=Dienstag" & set "WoTaEn=Tuesday"
If "%WoTach%" equ "Wed" set "WoTaDe=Mittwoch" & set "WoTaEn=Wednesday"
If "%WoTach%" equ "Thu" set "WoTaDe=Donnerstag" & set "WoTaEn=Thursday"
If "%WoTach%" equ "Fri" set "WoTaDe=Freitag" & set "WoTaEn=Friday"
If "%WoTach%" equ "Sat" set "WoTaDe=Samstag" & set "WoTaEn=Saturday"
If "%WoTach%" equ "Sun" set "WoTaDe=Sonntag" & set "WoTaEn=Sunday"
:allesEasy
:: auf deutsches XP-Date-Format setzen
:: unused call :SetNewValue iDate
call :SetNewValue sShortdate "dd.MM.yyyy"
call :SetNewValue s1159 ""
call :SetNewValue s2359 ""
call :SetNewValue sTimeFormat "HH:mm:ss"
For /f "delims=" %%i in ('time/t') do set "deTime=%%i"
For /f "delims=" %%i in ('date/t') do set "deDate=%%i"
:; auf amerkanisches Date-Format setzen
:: unused call :SetNewValue iDate
call :SetNewValue sShortdate "MM-dd-yyyy"
call :SetNewValue s1159 "AM"
call :SetNewValue s2359 "PM"
call :SetNewValue sTimeFormat "hh:mm:ss tt"
For /f "delims=" %%i in ('time/t') do set "enTime=%%i"
For /f "delims=" %%i in ('date/t') do set "enDate=%%i"
REM unused call :SetNewValue iDate
call :SetNewValue s1159 "%old_s1159%"
call :SetNewValue s2359 "%old_s2359%"
call :SetNewValue sTimeFormat "%old_sTimeFormat%"
call :SetNewValue sShortdate "%old_sShortDate%"
:: optional ....Summertime.... and the living is easy...
:: Geht natürlich nur mit Rechten auf HKLM...
Set regkey="HKLM\System\CurrentControlSet\Control\TimeZoneInformation"
call :SaveOldValue ActiveTimeBias
call :SaveOldValue DaylightBias
call :SaveOldValue StandardName
call :SaveOldValue DaylightName
call :SaveOldValue Bias
If defined old_Bias Set /a GMTdiff= %old_Bias% / -60
If defined old_ActiveTimeBias Set /a Actdiff= %old_ActiveTimeBias% / -60
If defined old_DayLightBias Set /a UTCdiff= %old_DaylightBias% / -60
:: -----------
Echo xyDate [xyTime]: %xyDate% [%xytime%]
Echo deDate [deTime]: %deDate% [%detime%]
Echo enDate [entime]: %enDate% [%entime%]
Echo WoTach: [%WoTach%] WoTaDe [%WoTaDe%] WoTaEn: [%WotaEn%]
If defined ActDiff echo Act-Differenz in Stunden plus/minus: [All+%ActDiff%]
if defined old_StandardName Echo Zeitzone: %old_StandardName%
if defined old_DaylightName Echo Sommerzeit: %old_DaylightName%
If defined GMTDiff echo GMT-Differenz in Stunden plus/minus: [GMT+%GMTDiff%]
If defined UTCDiff echo UTC-Differenz in Stunden plus/minus: [UTC+%UTCDiff%]
echo\
Echo @DaSilva:
echo say Heute ist %WoTach%, der %xyDate% um %xytime% in XY-Land
echo say Heute ist %WoTaDe%, der %deDate% um %time% Uhr in Deutschland
echo say Today is %WoTaEn%, %endate% %EnTime% in Germany
goto :eof
~~~~~~~~~ [End of bätschelchen]
:SetNewvalue param1=wert param2=value in Anfü-Zeichen
If %2=="""" (
reg add %regkey% /v "%~1" /f >nul
) else (
reg add %regkey% /v "%~1" /d "%~2" /f >nul
)
goto :eof
:SaveOldValue param1=regValue
For /f "tokens=2*" %%i in ('reg query %regkey% /v "%~1" ^2^>nul^|findstr /i "%~1"') do (
If "%%j" Equ "" (set old_%1="") else set "old_%1=%%j"
)
goto :eof
>e:\schnipsel\GetEnDeCfg.cmd
xyDate [xyTime]: 20.06.08 [18:33]
deDate [deTime]: 20.06.2008 [18:33]
enDate [entime]: 06-20-2008 [06:33 PM]
WoTach: [Fr] WoTaDe [Freitag] WoTaEn: [Friday]
Act-Differenz in Stunden plus/minus: [All+2]
Zeitzone: Westeuropõische Normalzeit
Sommerzeit: Westeuropõische Normalzeit
GMT-Differenz in Stunden plus/minus: [GMT+1]
UTC-Differenz in Stunden plus/minus: [UTC+1]
@DaSilva:
say Heute ist Fr, der 20.06.08 um 18:33 in XY-Land
say Heute ist Freitag, der 20.06.2008 um 18:33:56,25 Uhr in Deutschland
say Today is Friday, 06-20-2008 06:33 PM in Germany
Die ganze Wochentagsberechnung z.B spar ich mit, indem ich einfach das datums-Anzeigeformat auf "ddd" setze statt das "dd.MM.yyyy" hinzunehmen.
Siehe in Zeile 33ff.
So bekomme ich bei einem "date /t" die Ausgabe "Fr"... *g
Aber ich gebe zu, dass so ein Vorgehen natürlich kein Professionelles ist.
...kann auch gut damit leben....
Grüße
Biber
[Edit] Umgang mit vorhandenen {leeren} Registry-Werten geändert - setNewValue/SaveOldValue angepasst. Siehe unten. [/Edit]
Moin DaSilva,
Dass diese Fehlermeldung kommt, "ist ein beabsichtigtes Verhalten" (um eine bekannte Redmonder Softwareklitsche zu zitieren). Works as designed, wie wir Biber sagen.
Oben im Schnipsel kannst Du nachverfolgen, dass ich natürlich erst versuche, die vorhandenen HKCU-Werte des Users zu lesen und zu sichern, bevor ich sie mit irgendeinem Dreck überschreibe.
Wenn es die Werte nicht gibt, steigt das Skript (kontrolliert) aus.
Den Schlüssel "sShortDate", in dem so etwas wie "dd.MM.yyyy" bei Dir stehen wird, den hat er gefunden.
Die beiden Werte "s1159" und "s2359" sind bei Dir wohl nicht definiert, weil Du -trotz Deiner Anglophilie- noch nie mit Us-Datumsformat gearbeitet an diesem Rechner.
--> definiere sie einfach. Liest /interpretiert außer meinem Skript ja keiner.
Bitte an den CMD-Prompt:
"vm" für vormittach, "nm" für nachmMittach
Oder jeweils auf "". (Leerstring)
-->vollkommen wurscht, sieht keiner.
Die bei Dir vorhandenen Werte solltest Du Dir am besten einmal anzeigen und kopieren:
Dann schauen wir weiter.
Grüße
Biber
Kann das an Vista liegen?
Teils, teils.Dass diese Fehlermeldung kommt, "ist ein beabsichtigtes Verhalten" (um eine bekannte Redmonder Softwareklitsche zu zitieren). Works as designed, wie wir Biber sagen.
Oben im Schnipsel kannst Du nachverfolgen, dass ich natürlich erst versuche, die vorhandenen HKCU-Werte des Users zu lesen und zu sichern, bevor ich sie mit irgendeinem Dreck überschreibe.
Wenn es die Werte nicht gibt, steigt das Skript (kontrolliert) aus.
Den Schlüssel "sShortDate", in dem so etwas wie "dd.MM.yyyy" bei Dir stehen wird, den hat er gefunden.
Die beiden Werte "s1159" und "s2359" sind bei Dir wohl nicht definiert, weil Du -trotz Deiner Anglophilie- noch nie mit Us-Datumsformat gearbeitet an diesem Rechner.
--> definiere sie einfach. Liest /interpretiert außer meinem Skript ja keiner.
Bitte an den CMD-Prompt:
set regkey="HKEY_CURRENT_USER\Control Panel\International"
reg add %regkey% /v s1159 /d "vm"
reg add %regkey% /v s2359 /d "nm"
Oder jeweils auf "". (Leerstring)
-->vollkommen wurscht, sieht keiner.
Die bei Dir vorhandenen Werte solltest Du Dir am besten einmal anzeigen und kopieren:
reg query %regkey% /s
Grüße
Biber
Moin DaSilva,
zu Deiner Frage "Uhrzeit auch mit Sekunden möglich"...
Ich fürchte: Nein.
Jedenfalls nicht ohne nun doch wieder selbst etwas mit Substr-Funktionen zusammenzustoppeln.
Grund ist diese [Disclaimer: Dies ist die ganz persönliche Meinung eines anonym angemeldeten Forenmitglieds und sollte nicht dem Betreiber dieses Forums angelastet werden.] buggybuggybuggy-Implementierung von Bills Bande.
Die Ausgaben von "date/t" und %date% und die Ausgaben von "time/t" und %time% sind nicht gleich.
Beispiel für (deutsche) Zeit:
--->How The ..Kuckuck kommt so etwas durch die Qualitätskontrolle?
Ebenso unglaublich, dass hinter der Ausgabe von "date/t" ein übersehenes Leerzeichen hängt (siehe die Ausgaben in meinem Schnipsel oben).
Praktikantenpfusch.
Anyhow, die Registry-Werte, die wir hier manipulieren, sind immer sofort bei date/t und time/t wirksam... aber bei time/t ist mir keine Holzhammermethode bekannt, mit der ich via Registry die Sekunden mit anzeigen lassen kann.
Eventuell kannst Du es mal versuchen, ob Du über Klickibunti (Einstellungen->Regions- und Spracheinstellungen->Datum und Uhrzeit") eine solche Möglichkeit findest.
Und dann in der Registry nachschauen, was sich geändert hat.
Oder mal abwarten, ob jemand anderes vielleicht mal darüber gestolpert ist und das hier postet.
Zwei Anmerkungen noch zu Deinem Skript:
Die ganzen ausgeREMten Zeilen kannst Du, wenn Du die nicht wegwerfen willst, überspringen,wenn Du in Zeile 99 aus dem ":loop" ein "goto :loop" machst und diese Sprungmarke :loop" nach Zeile 111 setzt.
Und statt "sleep 1" würde ich ein "sleep 30" oder so setzen...
...wir wollen es doch nicht übertreiben.
Hey, ist nur ein Batch... kein Satellitensteuerungsprogramm...
Grüße
Biber
zu Deiner Frage "Uhrzeit auch mit Sekunden möglich"...
Ich fürchte: Nein.
Jedenfalls nicht ohne nun doch wieder selbst etwas mit Substr-Funktionen zusammenzustoppeln.
Grund ist diese [Disclaimer: Dies ist die ganz persönliche Meinung eines anonym angemeldeten Forenmitglieds und sollte nicht dem Betreiber dieses Forums angelastet werden.] buggybuggybuggy-Implementierung von Bills Bande.
Die Ausgaben von "date/t" und %date% und die Ausgaben von "time/t" und %time% sind nicht gleich.
Beispiel für (deutsche) Zeit:
>time /t & echo %time%
1:18
1:18:38,97
Ebenso unglaublich, dass hinter der Ausgabe von "date/t" ein übersehenes Leerzeichen hängt (siehe die Ausgaben in meinem Schnipsel oben).
Praktikantenpfusch.
Anyhow, die Registry-Werte, die wir hier manipulieren, sind immer sofort bei date/t und time/t wirksam... aber bei time/t ist mir keine Holzhammermethode bekannt, mit der ich via Registry die Sekunden mit anzeigen lassen kann.
Eventuell kannst Du es mal versuchen, ob Du über Klickibunti (Einstellungen->Regions- und Spracheinstellungen->Datum und Uhrzeit") eine solche Möglichkeit findest.
Und dann in der Registry nachschauen, was sich geändert hat.
Oder mal abwarten, ob jemand anderes vielleicht mal darüber gestolpert ist und das hier postet.
Zwei Anmerkungen noch zu Deinem Skript:
Die ganzen ausgeREMten Zeilen kannst Du, wenn Du die nicht wegwerfen willst, überspringen,wenn Du in Zeile 99 aus dem ":loop" ein "goto :loop" machst und diese Sprungmarke :loop" nach Zeile 111 setzt.
Und statt "sleep 1" würde ich ein "sleep 30" oder so setzen...
...wir wollen es doch nicht übertreiben.
Hey, ist nur ein Batch... kein Satellitensteuerungsprogramm...
Grüße
Biber
Moin DaSilva,
wie geschrieben, ich halte die vorhandene M$-Implementierung der Regions/Spracheinstellungen für suboptimal...
Und Dein wahrgenommenes Phänomen passt zu meiner Wahrnehmung.
Das merkwürdige Leerzeichen nach der "date /t"-Ausgabe hatte ich ja auch schon angesprochen. Wenn das nun auch "nicht immer da ist", dann... na ja, sagen wir so: Kann auch sein, dass ich einen Tippfehler drin habe. Ich werde es noch mal prüfen.
Kann aber auch sein, das M$ einen klitzekleinen Flüchtigkeitsfehler übersehen haben könnte.
A propos Murks:
Ich würde auch gern nachbessern - an einer Stelle habe ich gepennt.
Die Werte s1159 und s2359, die bei Dir als "nicht gefunden" angemeckert wurden:
Fehlinterpretation von mir. Die existieren als REG_SZ, aber die sind {leer}.
Ich ändere deshalb die beiden Call:Blöcke unterhalb des eigentlichen Schnipsels wie folgt:
Lese ich jetzt einen "leeren" Registrywert, dann wird die old_xxx-Variable auch auf "" gesetzt.
Soll ein RegValue auf "leer" gesetzt werden, dann ist die Syntax des Reg.exe-Utilities auch weniger dubios, wenn der /d-Parameter ( /d=fülle mit Daten) ganz weggelassen wird.
Ich ziehe diese Änderung oben im Schnipsel nach.
Einen Nachtrag noch zu dem Time/t-Wert und ob der auch Sekunden anzeigen kann.
Vergiss es. Habe in meinen Akten nachgeschaut.
Der Time/t-Wert wird nur minütlich aktualisiert.
Also ist auf diesem Weg keine Sekunden-Information abgreifbar.
Grüße
Biber
wie geschrieben, ich halte die vorhandene M$-Implementierung der Regions/Spracheinstellungen für suboptimal...
Und Dein wahrgenommenes Phänomen passt zu meiner Wahrnehmung.
Das merkwürdige Leerzeichen nach der "date /t"-Ausgabe hatte ich ja auch schon angesprochen. Wenn das nun auch "nicht immer da ist", dann... na ja, sagen wir so: Kann auch sein, dass ich einen Tippfehler drin habe. Ich werde es noch mal prüfen.
Kann aber auch sein, das M$ einen klitzekleinen Flüchtigkeitsfehler übersehen haben könnte.
A propos Murks:
Ich würde auch gern nachbessern - an einer Stelle habe ich gepennt.
Die Werte s1159 und s2359, die bei Dir als "nicht gefunden" angemeckert wurden:
Fehlinterpretation von mir. Die existieren als REG_SZ, aber die sind {leer}.
Ich ändere deshalb die beiden Call:Blöcke unterhalb des eigentlichen Schnipsels wie folgt:
.....
...
~~~~~~~~~ [End of bätschelchen]
:SetNewvalue param1=wert param2=value in Anfü-Zeichen
If %2=="""" (
reg add %regkey% /v "%~1" /f >nul
) else (
reg add %regkey% /v "%~1" /d "%~2" /f >nul
)
goto :eof
:SaveOldValue param1=regValue
For /f "tokens=2*" %%i in ('reg query %regkey% /v "%~1" ^2^>nul^|findstr /i "%~1"') do (
If "%%j" Equ "" (set old_%1="") else set "old_%1=%%j"
)
goto :eof
Lese ich jetzt einen "leeren" Registrywert, dann wird die old_xxx-Variable auch auf "" gesetzt.
Soll ein RegValue auf "leer" gesetzt werden, dann ist die Syntax des Reg.exe-Utilities auch weniger dubios, wenn der /d-Parameter ( /d=fülle mit Daten) ganz weggelassen wird.
Ich ziehe diese Änderung oben im Schnipsel nach.
Einen Nachtrag noch zu dem Time/t-Wert und ob der auch Sekunden anzeigen kann.
Vergiss es. Habe in meinen Akten nachgeschaut.
Der Time/t-Wert wird nur minütlich aktualisiert.
Also ist auf diesem Weg keine Sekunden-Information abgreifbar.
Grüße
Biber