mycroftone
Goto Top

GET-DATE-TIME-G von Biber auch mit AM PM Amerikanischen Zeiten mit AM PM in deutschen 24 Stunden umwandeln

Hallo Biber dein Kommentar mann kann auch dir ausgaben übergeben und umwandeln hat zu folgenden Script verleitet.

Ich bekomme logdateien von Verzeichnissen aus der ganzen Welt auch welch hinter dennen AP oder PM steht.

Jetzt habe ich nach dem Script vom Biber GET-DATE-TIME-G noch eine kleine ergänzung geschrieben aber eigentlich wollte ich es in der Subroutine haben .

Aber erste versuche scheiterten


set  "m-date="  
set  "m-time="  
set  "am-pm="  
set  "m-file="  
echo >dir-aus-amilandin-in-de.txt

for /f "tokens=1-4 " %%a in (dir-aus-amiland.txt) do (   
set m-date=%%a
set m-time=%%b
set am-pm=%%c
set m-file= %%c

call :GET-DATE-TIME-G !m-date! !m-time!  /s /q

if "!am-pm!"=="PM" (   
set /a hh=!hh!+12
If "!hh!"=="24" ( set hh=00)  
)
set m-date=!tt!.!mm!.!JJ!
set m-time=!hh!:!min!

echo "!m-date!" "!m-time!"  in de.   
echo  !m-date!  !m-time! !m-file >>dir-aus-amilandin-in-de.txt
)

Dieser Quellcode funktioniert.
Jetzt habe ich ihn wie folgt in die Subroutine eingebaut.

:GET-DATE-TIME-G

::-------snipp GetAllDateTimeInfos.bat ----- 
@ echo off & setlocal
:: v006b Setlocal ohne Zusatz "EnableDelayedExpansion"  
:: (c) Biberware 2005 Placed in the Public Domain Oct 2005 for Educational Purposes 
:: Ermittelt Datums/Zeitvariable aus dem CMD-Environment und stellt sie als Variablen bereit. 
:: Einschränkung: Sollte schon NT oder höher sein. Deshalb die erste Zeile 
:: Vers. 0.02 Minor Bugfix; siehe zweiten Kommentar unten. 14.12.2005 by Biber 
:: Vers. 0.06a Bugfix/Workarounds für Formfeed-Bug W2K und "Set /a 09"-Bug.   
:: -------------- Und alle SETs in Anführungszeichen. Siehe unten. 13.2.2006
:: Vers. 0.06b Aus Kompat-Gründen jetzt ohne erwartete "DelayedExpansion"-Reg-Voreinstellung.  
IF NOT "%OS%"=="Windows_NT" echo "%0 läuft nur unter WinNT oder höher. Sorry." && GOTO :eof   
If /i [%1]==[/?] goto Syntax 

set "us-to-de="  

For %%i in ( %1 %2 %3 %4) Do ( 
If /i [%%i]==[/s] Endlocal 
If /i [%%i]==[/u] Endlocal 
If /i [%%i]==[/h] goto Syntax 

If /i [%%i]==[PM] set us-to-de=1

) 

SET "AllDateTimeVars=DateOrder KW OSKW DoW DoY cDoW DD TT MM JJ YY hh min ss ms"   
FOR %%i in (%AllDateTimeVars%) do @if defined %%i set "%%i="   
:: Datum will ich OHNE Wochentag haben. Zwischenschritt mit INDate 

:: erweitert, Parameter erlaubt.. Param1=Datumswert;Param2=Zeit 
For %%i in (%1 %2 %3) Do If /i %%i==/u goto :Cleanup 
Set "INDate=%date%"   
Set "INTime=%time%"   

If NOT [%1]== If /i [%1] NEQ [/q] If /i [%1] NEQ [/s] set "INDate=%1"   
If NOT [%2]== If /i [%2] NEQ [/q] If /i [%2] NEQ [/s] set "INTime=%2"   

:: Die nächste Code-Zeile ändert nur dann etwas, wenn ein Wochentag mitgeliefert wird. 
:: Aus "Sa 01.10.2005" wird dann "01.10.2005"   
FOR /F "tokens=2" %%i in ("%INDate%") do Set "INDate=%%i"  
:: Beschränkung auf existierende Datumsformate siehe Posting mit CAT unten.
:: Das Format "Mo, 13. Februar 2006" mit zwei Leerzeichen würde NICHT funktionieren!  
FOR /F "tokens=1-7 delims=:/.-, " %%i in ("%INDate% %INTime%") do (   
     FOR /F "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (   
        for %%@ in ("DateOrder=%%a-%%b-%%c" "%%a=%%i" "%%b=%%j" "%%c=%%k" "hh=%%l" "min=%%m" "ss=%%n" "ms=%%o") do set %%@   
          ) 
     ) 

For %%i in (ss ms) do if not defined %%i set "%%i=00"   
:: ----- v005 Workaround wegen W2K-Formfeed-Bug: Kommata als Deliniter im VBS-Schnipsel-Output.
SET "vbsSnippet=%temp%\%random%.vbs"  
echo If wscript.arguments.count = 1 Then dDate=wscript.arguments.item(0) Else dDate=Date>%vbssnippet% 
echo Wscript.Echo "x," ^& DatePart("ww",dDate,vbSunday,vbFirstFourDays) ^& "," ^&_>>%vbsSnippet%   
echo DatePart("ww",dDate) ^& "," ^& DatePart("w",dDate) ^& "," ^& DatePart("y",dDate)>>%vbsSnippet%   

for /F "delims=, tokens=2-5" %%a in ('cscript //nologo %vbsSnippet% %INDate%') do (   
(Set "KW=%%a" ) && Rem Kalenderwoche nach verbreiteter Berechnung   
(Set "OSKW=%%b" ) && Rem Kalenderwoche nach Betriebssystemvorgaben nicht über GUI änderbar! *lacht   
(Set "DoW=%%c" ) && Rem Day of Week 1=Sonntag, 2= Montag... bei meinen REG-Settings   
(Set "DoY=%%d" ) && Rem Day of Year, Kalendertag   
) 
del %vbssnippet%

:: Tag, Monat und Stunde möchte ich immer zweistellig haben, also mit führender "0"   
:: v006-Fix<s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set /a %%i+=100 </s> 
:: v006-Fix wg. Set /A-Bug. THX an superfrog für den Bugreport.
:: v006b-Fix-Fix <s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set "%%i=10!%%i!"</s>  
:: --- für die beiden Fixes siehe die Kommentare von superfrog unten -- 14.2.2006
IF defined DD Set "DD=10%DD%"   
IF defined TT Set "TT=10%TT%"   
IF defined MM Set "MM=10%MM%"   
IF defined hh Set "hh=10%hh%"   
:: -v006b ----Vier Zeilen ohne DeleayEnpansion statt eine FOR..IN..DO-Anweisung

set "hh=%hh:~-2,2%"   
set "MM=%MM:~-2,2%"  
:: ... und den Wochentag will ich auch, wenigstens in zwei Sprachen. 
IF defined DD ( 
set "DD=%DD:~-2,2%"   
IF %DoW%==1 Set "cDow=Sun"   
IF %DoW%==2 Set "cDow=Mon"   
IF %DoW%==3 Set "cDow=Tue"   
IF %DoW%==4 Set "cDow=Wed"   
IF %DoW%==5 Set "cDow=Thu"   
IF %DoW%==6 Set "cDow=Fri"   
IF %DoW%==7 Set "cDow=Sat"   
) 

IF defined TT ( 
set "TT=%TT:~-2,2%"   
IF %DoW%==1 Set "cDow=So"   
IF %DoW%==2 Set "cDow=Mo"   
IF %DoW%==3 Set "cDow=Di"   
IF %DoW%==4 Set "cDow=Mi"   
IF %DoW%==5 Set "cDow=Do"   
IF %DoW%==6 Set "cDow=Fr"   
IF %DoW%==7 Set "cDow=Sa"   

) 
:: so.. hier schlampe ich mal.. 
:: alle 2-stelligen Jahre kleiner 39 werden zu 2001...2038 
:: alle 2-stelligen Jahre größer gleich 39 und kleiner gleich 99 werde zu 1939 bis 1999 

IF not defined YY goto YYskip 
IF %YY% LSS 39 set "YY=20%YY%"   
IF %YY% LEQ 99 set "YY=19%YY%"   
:YYskip 
If not defined JJ goto JJskip 
IF %JJ% LSS 39 set "JJ=20%JJ%"   
IF %JJ% LEQ 99 set "JJ=19%JJ%"   
:JJskip 

IF defined YY set "JJ=%YY%"   
IF defined JJ set "YY=%JJ%"   
IF defined DD Set "TT=%DD%"   
IF defined TT Set "DD=%TT%"   
:: Lass sehen, was wir haben....falls kein Parameter /q 
For %%i in (%1 %2 %3 %4) Do If /i %%i==/q goto cleanUp 

For %%i in (INDate INTime %AllDateTimeVars%) do @if defined %%i set %%i 


if "%us-to-de%"=="1" (   
set /a hh=!hh!+12
If "!hh!"=="24" ( set hh=00)  
)


:cleanUp 
For %%i in (vbssnippet INTime INDate) Do Set "%%i="   
goto :eof 

:Syntax 
ECHO. 
ECHO %~nx0 By Frank / dem Biber aus Bremen 2005 
ECHO. 
ECHO Ermittelt strukturierte Informationen über Datum und Zeit 
ECHO Angezeigt oder optional in Variablen gesetzt werden: 
ECHO %AllDateTimeVars% 
ECHO. 
Echo Syntax: 
ECHO %~nx0 [Datum] [Zeit] [/s^|/u] [/q] [/?] 
ECHO. 
ECHO Datum Datumswert wie vom System oder der Dir-Ausgabe geliefert. 
ECHO Default Systemdatum. 
ECHO Zeit Zeit wie vom System oder der Dir-Ausgabe geliefert. Default Systemzeit 
ECHO /s SET Setzt die oben genannten Umgebungsvariablen 
ECHO /u UNSET Löscht die gesetzten Umgebungsvariablen 
ECHO /q QUIET Unterdrückt die Bildschirmanzeige der ermittelten Werte 
ECHO. /^? Zeigt diese schöne Hilfe 
Goto :eof 


Bekomme aber die Fehlermeldung

Fehlere Operator


Also was mache ich falsch

biber du solltest dich doch mit deinem Code an besten auskenne face-wink

Content-ID: 120652

Url: https://administrator.de/contentid/120652

Ausgedruckt am: 24.11.2024 um 03:11 Uhr

Biber
Biber 17.07.2009 um 00:34:52 Uhr
Goto Top
Moin mycroftone,

soweit ich es nachvollziehen kann, ist es für Dich doch gar nicht nötig, meinen Datumszerbröselschnipsel aufzurufen.
Bzw. ich sehe 3 mögliche Strategien.

Strategie a) Du machst alles in Deiner Batch - ohne aufwändige Datumszerlege-Subroutine
Die Konvertierung Deiner catalogo milano-Textdatei bekommst Du doch problemlos mit Deinem eigenen Schnipsel hin.

Bzw. die kleine Arbeit, die ich Dir dadurch abnehme, dass ich die "Stunden" schon als Variable %hh% liefere...
Ja hey! das bekommen wir auch mit einer viel viel kleineren FOR /F Anweisung hin.

Poste doch mal bitte 3 oder 5 Zeilen Deiner Mailänder DIR-Liste, und darunter den Soll-Output, dann entwickeln wir das hier.

Strategie b) Deine Batchdatei ruft "meine" Batchdatei.
Nächstdümmere Alternative wäre, die GetAllDateTimeInfos.bat als (separate) Batchdatei aufzurufen,
diese aber um einen optionalen dritten Parameter (AM_PM) zu erweitern... [unterstellt, dass in 95%der Fälle auch nur "AM" und "PM" drinstehen.].
Denn das Umrechnen auf 24h-Format (sprich: ggf. 12 Stunden addieren, wenn es nach dem Frühstück ist), das wäre ja genau das, was der Schnipsel vorgegeben hat leisten zu können ("beliebige Datums-/Zeitformate zu vereinheitlichen")

Strategie c)
Allerdings würde bei einer Umwidmung der bisher eigenständigen Batchdatei zu einer geCALLten Unterroutine (also Deinem eigentlichen Ziel)möglicherweise ein bisschen mehr zu ändern und zu testen sein (insbesondere die Mimik mit globalen/lokalen Veriablen.

Strategie A) erscheint mir die einfachste für diese Aufgabe.
Strategie B) hat den Reiz, die GetAllDateTimeInfos.bat noch um diese AM/PM-Erkennung zu erweitern.... okay.
Ist aber für Dein Vorhaben auch total überdimensioniert.

--> von C) würde ich abraten... da ist der Aufwand nicht vertretbar.
Und es läuft meiner Absicht zuwider, auch mal wiederverwendbare/allgemein verwendbare Beispielschnipsel zu posten.

Lass uns doch mal A (oder wenn nix im Fernsehen kommt auch B) versuchen.
Siehe oben:
Poste doch mal bitte 3 oder 5 Zeilen Deiner Mailänder DIR-Liste, und darunter den Soll-Output, dann entwickeln wir das hier.


Grüße
Biber
mycroftone
mycroftone 17.07.2009 um 14:52:27 Uhr
Goto Top
Moin biber, gestern abend ging nicht das Fernsehprogramm sondern Kind und Frau vor face-wink

Also zum Sachverhalt.

Ich bekomme aus Indien folgende dir Ausgaben

07/17/2009 12:46 AM <DIR> PROD_Archiv_0309_
07/19/2009 11:45 PM <DIR> PROD_Archiv_0509_
07/18/2009 04:45 PM <DIR> PROD_Archiv_0609_

Und aus Russland folgende dir Ausgabe

06.02.2008 16:02 <DIR> PROD_DATA_1007_
06.03.2008 23:02 <DIR> PROD_DATA_1107_
06.04.2008 11:02 <DIR> PROD_DATA_0907_


Alles zusammen kommt dann in folgende Logdatei

Indien PROD_Archiv_0309_ vom 17.7.2009 12:46
Indien PROD_Archiv_0509_ vom 19.7.2009 23:45
Indien PROD_Archiv_0609_ vom 18.7.2009 16:45
Russland PROD_DATA_1007_ vom 06.02.2008 16:02
Russland PROD_DATA_1107_ vom 06.03.2008 23:02
Russland PROD_DATA_0907_ vom 06.04.2008 11:02

Das ist der erste Schritt anhand der dir Ausgaben aus den Ländern herauszufinden wann wer welche Produktiv Pakete heruntergeladen hat.

Später will ich das noch verfeinern und anhand von Logdatein in dennen steht Installation Ok zu verfizieren ob die Pakete auch richtig angekommen sind.
Aber auch dor gibt es Zeitstempel in form von 06.04.2008 11:02 und 07/18/2009 04:45 PM

Deswegen wollte ich es gleich in die subroutine einbauen. Damit ich die Später nur noch nehmen muß.

Mein Post oben deiner GET-DATE-TIME-G Routine mit den Implementierten teilen von mir
in der ich die Fehlermeldung *Fehlender Operator* bekomme
ist ja eine eigene Batchdatei wir können also gerne deinen Strategie 2 verfolgen.


Zu den Problemen die du in Strategier 3 siehst kann ich gar nix sagen dazu bin ich noch zu wenig in der Batch Programmierung eingearbeitet.


Was mir aber noch zu Strategie 2 einfällt ist ich habe nur bei mir getestet wenn die drei Werte "Datum" "Zeit" "AM/PM" übergeben werden.

Aber nicht wenn time/T auch eine Ausgabe in Form von 11:02 PM ausgibt.


Wenn du aber meinst du willst hier keine Batchsnipsel Posten die Allgemeingültig von jeden verwendet werden können dann köönen wir auch gerne diesesn Thead schließen das war nähmlich vordringlich meine betreben mit dem Post hier.

Auch wenn ich es Cool finden würde so eine Subroutine / eine eigen Batch Datei dafür zu haben.
Weil das Problem mit den unterschiedlichen Zeitformaten wird es immer geben.
Ich denke dafür hast du ja auch die Subroutine hier gepostet.
Biber
Biber 17.07.2009 um 18:13:23 Uhr
Goto Top
Moin mycroftone,

immer der Reihe nach... erst mal Strategie 1, dann schauen wir, ob wir mehr brauchen.

Wenn ich Dich richtig verstanden habe, dann liegen die LogFiles als einzelne Dateien getrennt voneinander vor.

Vereinfacht ausgedrückt, bei Dir liegt irgendwie irgendwie eine Datei
  • "Indien_Juli2009.txt" oder so ähnlich mit Inhalt
07/17/2009 12:46 AM <DIR> PROD_Archiv_0309_
07/19/2009 11:45 PM <DIR> PROD_Archiv_0509_
07/18/2009 04:45 PM <DIR> PROD_Archiv_0609_
.....

  • und eine "Russland_2008" oder so mit Inhalt
06.02.2008 16:02 <DIR> PROD_DATA_1007_
06.03.2008 23:02 <DIR> PROD_DATA_1107_
06.04.2008 11:02 <DIR> PROD_DATA_0907_

Im Fall Russland habe ich gar kein Problem, die einzelnen Zeilen-Bestandteile
zuzuordnen oder auch neu anzuordnen:
[Text am CMD-Prompt; das ">" am Zeilenanfang nicht mit eingeben.]
>type e:\work\Russland_2008.txt
06.02.2008 16:02 <DIR> PROD_DATA_1007_
06.03.2008 23:02 <DIR> PROD_DATA_1107_
06.04.2008 11:02 <DIR> PROD_DATA_0907_

(=17:06:52  D:\temp=)
>for /F "tokens=1-4,6* delims=/. " %a in (e:\work\Russland_2008.txt) do @echo TT[%a] MM[%b] JJJJ[%c] zeit[%d] Dirname[%e]  
TT[06] MM[02] JJJJ[2008] zeit[16:02] Dirname[PROD_DATA_1007_]
TT[06] MM[03] JJJJ[2008] zeit[23:02] Dirname[PROD_DATA_1107_]
TT[06] MM[04] JJJJ[2008] zeit[11:02] Dirname[PROD_DATA_0907_]

Wenn Du lieber dieses Format haben willst
Russland PROD_DATA_0907_ vom 06.04.2008 11:02"
...okay:
>for /F "tokens=1-4,6* delims=/. " %a in (e:\work\Russland_2008.txt) do @echo Russland %e %a.%b.%c %d  
Russland PROD_DATA_1007_ 06.02.2008 16:02
Russland PROD_DATA_1107_ 06.03.2008 23:02
Russland PROD_DATA_0907_ 06.04.2008 11:02
Fettich.

Im Falle "Indien" wird es nun auch nicht soooooo komplex.

Ein erstes Antesten liefert:
>for /F "tokens=1-6,8* delims=/.: " %a in (e:\work\indien_2009.txt) do @echo MM[%a] TT[%b] JJJJ[%c] hh[%d] mm[%e] AMPM[%f] Dirname [%g]  
MM[07] TT[17] JJJJ[2009] hh[12] mm[46] AMPM[AM] Dirname [PROD_Archiv_0309_]
MM[07] TT[19] JJJJ[2009] hh[11] mm[45] AMPM[PM] Dirname [PROD_Archiv_0509_]
MM[07] TT[18] JJJJ[2009] hh[04] mm[45] AMPM[PM] Dirname [PROD_Archiv_0609_]

Das heißt, hier ist abhängig von 6.Token/Variable %f eine Addition von 12 Stunden auf den %hh% Wert nötig

Diesen Rest mache ich jetzt mal in einer Batchdatei, weil die Darstellung von längeren Befehlszeilen hier im Forum nur suboptimal unterstützt wird.

Also: Batchdatei namens TestIndien.cmd.

::--- TestIndien
@echo off & setlocal EnableDelayedExpansion

for /F "tokens=1-6,8* delims=/.: " %%a in (e:\work\indien_2009.txt) do (  
    echo ---test--1- ] MM[%%a] TT[%%b] JJJJ[%%c] hh[%%d] mm[%%e] AMPM[%%f] Dirname [%%g]

    if [%%f]==[AM] (
        Set "HH=%%d"  
    ) Else (
       If [%%d]==[00] Set "hh=12"      
       If [%%d]==[01] Set "hh=13"  
       If [%%d]==[02] Set "hh=14"  
       If [%%d]==[03] Set "hh=15"  
       If [%%d]==[04] Set "hh=16"  
       If [%%d]==[05] Set "hh=17"  
       If [%%d]==[06] Set "hh=18"  
       If [%%d]==[07] Set "hh=19"  
       If [%%d]==[08] Set "hh=20"  
       If [%%d]==[09] Set "hh=21"  
       If [%%d]==[10] Set "hh=22"  
       If [%%d]==[11] Set "hh=23"  

       If [%%d]==[12] Set "hh=00"  
    )
    echo ---test--2- formatierte Zeile:
    Echo Indien %%g %%b.%%a.%%c !hh!:%%e 
 )
 

Ausgabe des Testschnipsels:
>e:\work\TestIndien
---test--1- ] MM[07] TT[17] JJJJ[2009] hh[12] mm[46] AMPM[AM] Dirname [PROD_Archiv_0309_]
---test--2- formatierte Zeile:
Indien PROD_Archiv_0309_ 17.07.2009 12:46
---test--1- ] MM[07] TT[19] JJJJ[2009] hh[11] mm[45] AMPM[PM] Dirname [PROD_Archiv_0509_]
---test--2- formatierte Zeile:
Indien PROD_Archiv_0509_ 19.07.2009 23:45
---test--1- ] MM[07] TT[18] JJJJ[2009] hh[04] mm[45] AMPM[PM] Dirname [PROD_Archiv_0609_]
---test--2- formatierte Zeile:
Indien PROD_Archiv_0609_ 18.07.2009 16:45

Also.... ich sehe keine Notwendigkeit einer noch aufwändigeren Datumszerlegung.

PS. Und hier hast Du mich falsch verstanden.
Wenn du aber meinst du willst hier keine Batchsnipsel Posten die Allgemeingültig von jeden verwendet werden können
Doch doch, will ich durchaus.... ich will nur nicht bereits "fertige" Schnipsel noch mal für diesen oder jenen Spezialfall anpassen.
Sondern eher die Schnipsel so variabel lassen, dass sie für verschiedene Gelegenheiten verwendet werden können.

Grüße
Biber
mycroftone
mycroftone 17.07.2009 um 18:26:12 Uhr
Goto Top
Hallo Biber

Ok dann habe ich dich wirklich falsch verstanden.

Ich dacht nur deine Allegemeingültigen super subroutine könnten wir für den Fall das die Zeitangabe AM/PM ist erweitern.
Und ist nach meiner meinung nach auch kein Spezialfall.

Da ich wie ich schon geschrieben habe die subroutine sei es auch in Strategie 2 weiterverwenden will für folgeprojekte
währe ich daran interressiert deine subroutine sinnvoll zu ergänzen.
Biber
Biber 17.07.2009 um 20:28:09 Uhr
Goto Top
Moin mycroftone,

okay, diese mögliche AMPM-Format-Information lässt sich sicherlich noch relativ stressarm einbauen.
Das ist die gute Nachricht
Weite unten kommt aber noch eine schlechte.

Zu berücksichtigen ist ja nur, dass die bisherige GetAllDateTimeInfos.bat [oder .cmd] JETZT max 5 Parameter erwartet.

Syntax jetzt: <batname> [Datum] [Zeit] [/s|/u] [/q] [/?]
--> also bei sinnvollem Aufrufen maximal die Parameter datum zeit /setzeGlobaleVars /quaknichrumdabei
[Beispiel] getAllDatetimeInfos 11.11.2009 10:27 /s /q [/Beispiel]

Das wäre jetzt zu erweitern auf einen weiteren [optionalen] Parameter
--> somit bei sinnvollem Aufrufen maximal die Parameter datum zeit AmPm /setzeGlobaleVars /quaknichrumdabei

--> Todo:
a) Dort wo jetzt bei der Parameterprüfung bzw bei Erkennung der Steuerungsschalter (/s /q /u ) bisher steht:
For %%i in ( %1 %2 %3 %4) Do ( .......
Muss jetzt ein Parameter mehr geprüft werden:
For %%i in ( %1 %2 %3 %4 %5) Do (

b) in der Aufzählung
SET "AllDateTimeVars=DateOrder KW OSKW DoW DoY cDoW DD TT MM JJ YY hh min ss ms"
sollte eine weitere variable AMPM aufgenommen werden
SET "AllDateTimeVars=DateOrder KW OSKW DoW DoY cDoW DD TT MM JJ YY hh min ss ms AMPM"

c)

30.FOR %%i in (%AllDateTimeVars%) do @if defined %%i set "%%i=" 31.:: Datum will ich OHNE Wochentag haben. Zwischenschritt mit INDate 32. 33.:: erweitert, Parameter erlaubt.. Param1=Datumswert;Param2=Zeit 34.For %%i in (%1 %2 %3) Do If /i %%i==/u goto :Cleanup
35.Set "INDate=%date%"
36.Set "INTime=%time%"

nach den jetzigen Zeilen 38/39 oben im Schnipsel sollte eine neue Zeilen folgen.
38.If NOT [%1]== If /i [%1] NEQ [/q] If /i [%1] NEQ [/s] set "INDate=%1"
39.If NOT [%2]== If /i [%2] NEQ [/q] If /i [%2] NEQ [/s] set "INTime=%2"
--> neu: If [%3]==[PM] set "AMPM=PM" else Set "AMPM=AM"
(somit ist gesichert, dass bei fehlendem "AM" oder "PM"-Parameter "AM" gilt. Und "AM" bedeutet ja: "Addiere KEINE 12 Stunden zu irgendwas.")

d)
Bei der "Addition von 12 Stunden gibt es mehrere Wege.
d1) Den einleuchtenderen und schlankeren, den Du gewählt hast ("Rechne Stunde = Stunde plus 12").
Dabei hält allerdings die CMD.exe bzw. der Set /A-Befehl noch ein paar Überraschungen bereit.
Z.B wenn Du von "08:00 PM" auf unser deutsches Tagesschau-Zeitformat 20.00 gehen willst.
-> ein "Set /a 08 + 12" bringt leider nicht auf Anhieb 20, sondern erstmal einen Syntaxfehler. Probier es einfach.

d2) Weil ich da gar nicht mit der CMD.exe diskutieren wollte habe ich oben den etwas unbeholfeneren Copy&Paste-Weg skizziert.
Dieses umständliche "....If [%%d]==[01] Set "hh=13" .... If [%%d]==[06] Set "hh=18" If [%%d]==[12] Set "hh=00"....."
Sieht albern aus, ist aber lesbar und wartbar.

e) die Hilfe zur Syntax muss angepasst werden.

Das wars.

Jetzt die schlechte Nachricht.
Da die GetAllDatetimeInfo das Datums/Zeitformat des Rechners bzw des angemeldeten Users zugrundelegt,
wird sie im Falle "indisches DIR-Ausgabeformat" NICHT erkennen können, dass das Datum im Format "MM/TT/JJJJ" kommt.
Jedenfalls nicht, wenn auf Deinem Rechner eingestellt ist "TT.MM.JJJJ"

Hier musst du auf jeden fall vorher eingreifen und in einer FOR/F-Anweisung ein bisschen umsortieren.
Aber das hatten wir ja oben schon.

Einen Vorteil für Deine Verarbeitung sehe ich durch den Aufruf der GetAllDateTimeInfos nach wie vor nicht.
Okay, Du könntest noch bei jeder aufbereiteten Zeile mit dazu schreiben, welcher Wochentag es war oder welche KW.

Na ja, das musst Du abwägen, welcher Aufwand vertretbar ist.
Und üben tut es allemal.

Grüße
Biber
mycroftone
mycroftone 17.07.2009 um 20:50:25 Uhr
Goto Top
Alles klar ich Probiere es aus.

Der Sachverhalt das daß Rechnen Problem bereit könnte habe ich in meinen Logdateinen noch nicht gesehen.
Also bis jetzt schaut alles noch so wie ich gewünscht habe.
Das mit dem If [%%d]==[01] Set "hh=13 hatte ich erst
Aber wie du selber schon sagtest sah mir des weng dum aus.

Und das Problem mit dem Indian dir habe ich irgendwie nicht verstanden.
Wenn du meinst das ich 07/17/2009 über die drei Variabeln %MM% %TT% %JJ%
nachher selber in 17.7.2009 zusammenbasteln muss.
Das bekomme ich hin.

Ich werde auf jedenfall einmal deinen Subroutine mit den von dir angegeben Zeile verändern und austestet.
mycroftone
mycroftone 24.07.2009 um 13:11:43 Uhr
Goto Top
Hallo Biber

Jetzt habe ich dein Problematik wegen des Indischen Datums verstanden.

Ich hatte in meiner Auswertung plötzlich ein Download vom 7 Tag im 19 Monat

In dem Fall kann man dann ja doch keine allgemeingültiges Script wegen dem Datum bauen.
Also müss ich hier individuell darauf eingehen wenn das Land Indian ist das ich das Datum hier umbaue.

Oder man schlampt auch hier und prüft ob Monat größer 12 ist und Tauscht dann Monat und Tag dann währe man bei 2/3 der Tage richtig.
Aber ich denke da bleibe ich lieber bei der ersten Variante.


Das Script habe ich jetzt soweit ausgeweitet und funktioniert auch bei den ersten Tests.

 


:GET-DATE-TIME-G

::-------snipp GetAllDateTimeInfos.bat ----- 

@ echo off & setlocal
:: v006b Setlocal ohne Zusatz "EnableDelayedExpansion"  
:: (c) Biberware 2005 Placed in the Public Domain Oct 2005 for Educational Purposes 
:: Ermittelt Datums/Zeitvariable aus dem CMD-Environment und stellt sie als Variablen bereit. 
:: Einschränkung: Sollte schon NT oder höher sein. Deshalb die erste Zeile 
:: Vers. 0.02 Minor Bugfix; siehe zweiten Kommentar unten. 14.12.2005 by Biber 
:: Vers. 0.06a Bugfix/Workarounds für Formfeed-Bug W2K und "Set /a 09"-Bug.   
:: -------------- Und alle SETs in Anführungszeichen. Siehe unten. 13.2.2006
:: Vers. 0.06b Aus Kompat-Gründen jetzt ohne erwartete "DelayedExpansion"-Reg-Voreinstellung.  
IF NOT "%OS%"=="Windows_NT" echo "%0 läuft nur unter WinNT oder höher. Sorry." && GOTO :eof   
If /i [%1]==[/?] goto Syntax 

For %%i in ( %1 %2 %3 %4 %5) Do ( 
If /i [%%i]==[/s] Endlocal 
If /i [%%i]==[/u] Endlocal 
If /i [%%i]==[/h] goto Syntax 
) 

SET "AllDateTimeVars=DateOrder KW OSKW DoW DoY cDoW DD TT MM JJ YY hh min ss ms AMPM"   
FOR %%i in (%AllDateTimeVars%) do @if defined %%i set "%%i="   
:: Datum will ich OHNE Wochentag haben. Zwischenschritt mit INDate 

:: erweitert, Parameter erlaubt.. Param1=Datumswert;Param2=Zeit 
For %%i in (%1 %2 %3) Do If /i %%i==/u goto :Cleanup 
Set "INDate=%date%"   
Set "INTime=%time%"   

If NOT [%1]== If /i [%1] NEQ [/q] If /i [%1] NEQ [/s] set "INDate=%1"   
If NOT [%2]== If /i [%2] NEQ [/q] If /i [%2] NEQ [/s] set "INTime=%2"   
If [%3]==[PM] (
	     set "AMPM=PM"   
	     ) else (
	   Set "AMPM=AM"  
	    )

:: Die nächste Code-Zeile ändert nur dann etwas, wenn ein Wochentag mitgeliefert wird. 
:: Aus "Sa 01.10.2005" wird dann "01.10.2005"   
FOR /F "tokens=2" %%i in ("%INDate%") do Set "INDate=%%i"  
:: Beschränkung auf existierende Datumsformate siehe Posting mit CAT unten.
:: Das Format "Mo, 13. Februar 2006" mit zwei Leerzeichen würde NICHT funktionieren!  
FOR /F "tokens=1-7 delims=:/.-, " %%i in ("%INDate% %INTime%") do (   
     FOR /F "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (   
        for %%@ in ("DateOrder=%%a-%%b-%%c" "%%a=%%i" "%%b=%%j" "%%c=%%k" "hh=%%l" "min=%%m" "ss=%%n" "ms=%%o") do set %%@   
          ) 
     ) 

For %%i in (ss ms) do if not defined %%i set "%%i=00"   
:: ----- v005 Workaround wegen W2K-Formfeed-Bug: Kommata als Deliniter im VBS-Schnipsel-Output.
SET "vbsSnippet=%temp%\%random%.vbs"  
echo If wscript.arguments.count = 1 Then dDate=wscript.arguments.item(0) Else dDate=Date>%vbssnippet% 
echo Wscript.Echo "x," ^& DatePart("ww",dDate,vbSunday,vbFirstFourDays) ^& "," ^&_>>%vbsSnippet%   
echo DatePart("ww",dDate) ^& "," ^& DatePart("w",dDate) ^& "," ^& DatePart("y",dDate)>>%vbsSnippet%   

for /F "delims=, tokens=2-5" %%a in ('cscript //nologo %vbsSnippet% %INDate%') do (   
(Set "KW=%%a" ) && Rem Kalenderwoche nach verbreiteter Berechnung   
(Set "OSKW=%%b" ) && Rem Kalenderwoche nach Betriebssystemvorgaben nicht über GUI änderbar! *lacht   
(Set "DoW=%%c" ) && Rem Day of Week 1=Sonntag, 2= Montag... bei meinen REG-Settings   
(Set "DoY=%%d" ) && Rem Day of Year, Kalendertag   
) 
del %vbssnippet%

:: Tag, Monat und Stunde möchte ich immer zweistellig haben, also mit führender "0"   
:: v006-Fix<s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set /a %%i+=100 </s> 
:: v006-Fix wg. Set /A-Bug. THX an superfrog für den Bugreport.
:: v006b-Fix-Fix <s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set "%%i=10!%%i!"</s>  
:: --- für die beiden Fixes siehe die Kommentare von superfrog unten -- 14.2.2006
IF defined DD Set "DD=10%DD%"   
IF defined TT Set "TT=10%TT%"   
IF defined MM Set "MM=10%MM%"   
IF defined hh Set "hh=10%hh%"   
:: -v006b ----Vier Zeilen ohne DeleayEnpansion statt eine FOR..IN..DO-Anweisung

set "hh=%hh:~-2,2%"   
set "MM=%MM:~-2,2%"  
:: ... und den Wochentag will ich auch, wenigstens in zwei Sprachen. 
IF defined DD ( 
set "DD=%DD:~-2,2%"   
IF %DoW%==1 Set "cDow=Sun"   
IF %DoW%==2 Set "cDow=Mon"   
IF %DoW%==3 Set "cDow=Tue"   
IF %DoW%==4 Set "cDow=Wed"   
IF %DoW%==5 Set "cDow=Thu"   
IF %DoW%==6 Set "cDow=Fri"   
IF %DoW%==7 Set "cDow=Sat"   
) 

IF defined TT ( 
set "TT=%TT:~-2,2%"   
IF %DoW%==1 Set "cDow=So"   
IF %DoW%==2 Set "cDow=Mo"   
IF %DoW%==3 Set "cDow=Di"   
IF %DoW%==4 Set "cDow=Mi"   
IF %DoW%==5 Set "cDow=Do"   
IF %DoW%==6 Set "cDow=Fr"   
IF %DoW%==7 Set "cDow=Sa"   

) 
:: so.. hier schlampe ich mal.. 
:: alle 2-stelligen Jahre kleiner 39 werden zu 2001...2038 
:: alle 2-stelligen Jahre größer gleich 39 und kleiner gleich 99 werde zu 1939 bis 1999 

IF not defined YY goto YYskip 
IF %YY% LSS 39 set "YY=20%YY%"   
IF %YY% LEQ 99 set "YY=19%YY%"   
:YYskip 
If not defined JJ goto JJskip 
IF %JJ% LSS 39 set "JJ=20%JJ%"   
IF %JJ% LEQ 99 set "JJ=19%JJ%"   
:JJskip 

IF defined YY set "JJ=%YY%"   
IF defined JJ set "YY=%JJ%"   
IF defined DD Set "TT=%DD%"   
IF defined TT Set "DD=%TT%"   


if "%AMPM%"=="PM" (  
		If [%hh%]==[00] Set "hh=12"      
		If [%hh%]==[01] Set "hh=13"  
		If [%hh%]==[02] Set "hh=14"  
		If [%hh%]==[03] Set "hh=15"  
		If [%hh%]==[04] Set "hh=16"  
		If [%hh%]==[05] Set "hh=17"  
		If [%hh%]==[06] Set "hh=18"  
		If [%hh%]==[07] Set "hh=19"  
		If [%hh%]==[08] Set "hh=20"  
		If [%hh%]==[09] Set "hh=21"  
		If [%hh%]==[10] Set "hh=22"  
		If [%hh%]==[11] Set "hh=23"  
		If [%hh%]==[12] Set "hh=00"  
                                      ) 


:: Lass sehen, was wir haben....falls kein Parameter /q 
For %%i in (%1 %2 %3 %4) Do If /i %%i==/q goto cleanUp 

For %%i in (INDate INTime %AllDateTimeVars%) do @if defined %%i set %%i 

:cleanUp 
For %%i in (vbssnippet INTime INDate) Do Set "%%i="   
goto :eof 

:Syntax 
ECHO. 
ECHO %~nx0 By Frank / dem Biber aus Bremen 2005 
ECHO. 
ECHO Ermittelt strukturierte Informationen über Datum und Zeit 
ECHO Angezeigt oder optional in Variablen gesetzt werden: 
ECHO %AllDateTimeVars% 
ECHO. 
Echo Syntax: 
ECHO %~nx0 [Datum] [Zeit] [/s^|/u] [/q] [/?] 
ECHO. 
ECHO Datum Datumswert wie vom System oder der Dir-Ausgabe geliefert. 
ECHO Default Systemdatum. 
ECHO Zeit Zeit wie vom System oder der Dir-Ausgabe geliefert. Default Systemzeit 
ECHO /s SET Setzt die oben genannten Umgebungsvariablen 
ECHO /u UNSET Löscht die gesetzten Umgebungsvariablen 
ECHO /q QUIET Unterdrückt die Bildschirmanzeige der ermittelten Werte 
ECHO. /^? Zeigt diese schöne Hilfe 
Goto :eof 

Aber ich werde es noch weiter testen
mycroftone
mycroftone 22.12.2009 um 15:42:57 Uhr
Goto Top
Hallo Zusammen Ich habe das :GET-DATE-TIME-G Script noch etwas verändert.
Um hier etwas Internationler zu werden schicke ich zu meinen Logfiles von Kuinden immer das Datuimsformat mit
damit das umwandeln in das Deutsche Datumsformat keinen Problem bereitet.

Und wenn kein Datumsformat mitgeschickt wird wähle ich die 2/3 Lösung
also prüfe ob Monat größer 12 ist und Tauscht dann Monat und Tag.


 


:GET-DATE-TIME-G

::-------snipp GetAllDateTimeInfos.bat ----- 

@ echo off & setlocal
:: v006b Setlocal ohne Zusatz "EnableDelayedExpansion"  
:: (c) Biberware 2005 Placed in the Public Domain Oct 2005 for Educational Purposes 
:: Ermittelt Datums/Zeitvariable aus dem CMD-Environment und stellt sie als Variablen bereit. 
:: Einschränkung: Sollte schon NT oder höher sein. Deshalb die erste Zeile 
:: Vers. 0.02 Minor Bugfix; siehe zweiten Kommentar unten. 14.12.2005 by Biber 
:: Vers. 0.06a Bugfix/Workarounds für Formfeed-Bug W2K und "Set /a 09"-Bug.   
:: -------------- Und alle SETs in Anführungszeichen. Siehe unten. 13.2.2006
:: Vers. 0.06b Aus Kompat-Gründen jetzt ohne erwartete "DelayedExpansion"-Reg-Voreinstellung.  
IF NOT "%OS%"=="Windows_NT" echo "%0 läuft nur unter WinNT oder höher. Sorry." && GOTO :eof   
If /i [%1]==[/?] goto Syntax 



For %%i in ( %1 %2 %3 %4 %5) Do ( 
If /i [%%i]==[/s] Endlocal 
If /i [%%i]==[/u] Endlocal 
If /i [%%i]==[/h] goto Syntax 
) 


SET "AllDateTimeVars=DateOrder KW OSKW DoW DoY cDoW DD TT MM JJ YY hh min ss ms AMPM Datfor "   
FOR %%i in (%AllDateTimeVars%) do @if defined %%i set "%%i="   
:: Datum will ich OHNE Wochentag haben. Zwischenschritt mit INDate 

:: erweitert, Parameter erlaubt.. Param1=Datumswert;Param2=Zeit 
For %%i in (%1 %2 %3) Do If /i %%i==/u goto :Cleanup 
Set "INDate=%date%"   
Set "INTime=%time%"   


If NOT [%1]== If /i [%1] NEQ [/q] If /i [%1] NEQ [/s] set "INDate=%1"   
If NOT [%2]== If /i [%2] NEQ [/q] If /i [%2] NEQ [/s] set "INTime=%2"   
If [%3]==[PM] ( set "AMPM=PM" )  
If [%3]==[AM] ( set "AMPM=AM" )  

If [%3]==[M/d/yyyy] ( set "Datfor=MM-TT-JJJJ" )  
If [%3]==[dd.MM.yyyy] ( set "Datfor=TT-MM-JJJJ" )  

If [%4]==[M/d/yyyy] ( set "Datfor=MM-TT-JJJJ" )  
If [%4]==[dd.MM.yyyy] ( set "Datfor=TT-MM-JJJJ" )  

			   
:: Die nächste Code-Zeile ändert nur dann etwas, wenn ein Wochentag mitgeliefert wird. 
:: Aus "Sa 01.10.2005" wird dann "01.10.2005"   
FOR /F "tokens=2" %%i in ("%INDate%") do Set "INDate=%%i"  
:: Beschränkung auf existierende Datumsformate siehe Posting mit CAT unten.
:: Das Format "Mo, 13. Februar 2006" mit zwei Leerzeichen würde NICHT funktionieren!  
FOR /F "tokens=1-7 delims=:/.-, " %%i in ("%INDate% %INTime%") do (   
     FOR /F "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (   
        for %%@ in ("DateOrder=%%a-%%b-%%c" "%%a=%%i" "%%b=%%j" "%%c=%%k" "hh=%%l" "min=%%m" "ss=%%n" "ms=%%o") do set %%@   
          ) 
     ) 

For %%i in (ss ms) do if not defined %%i set "%%i=00"   
:: ----- v005 Workaround wegen W2K-Formfeed-Bug: Kommata als Deliniter im VBS-Schnipsel-Output.
SET "vbsSnippet=%temp%\%random%.vbs"  
echo If wscript.arguments.count = 1 Then dDate=wscript.arguments.item(0) Else dDate=Date>%vbssnippet% 
echo Wscript.Echo "x," ^& DatePart("ww",dDate,vbSunday,vbFirstFourDays) ^& "," ^&_>>%vbsSnippet%   
echo DatePart("ww",dDate) ^& "," ^& DatePart("w",dDate) ^& "," ^& DatePart("y",dDate)>>%vbsSnippet%   

for /F "delims=, tokens=2-5" %%a in ('cscript //nologo %vbsSnippet% %INDate%') do (   
(Set "KW=%%a" ) && Rem Kalenderwoche nach verbreiteter Berechnung   
(Set "OSKW=%%b" ) && Rem Kalenderwoche nach Betriebssystemvorgaben nicht über GUI änderbar! *lacht   
(Set "DoW=%%c" ) && Rem Day of Week 1=Sonntag, 2= Montag... bei meinen REG-Settings   
(Set "DoY=%%d" ) && Rem Day of Year, Kalendertag   
) 
del %vbssnippet%

:: Tag, Monat und Stunde möchte ich immer zweistellig haben, also mit führender "0"   
:: v006-Fix<s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set /a %%i+=100 </s> 
:: v006-Fix wg. Set /A-Bug. THX an superfrog für den Bugreport.
:: v006b-Fix-Fix <s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set "%%i=10!%%i!"</s>  
:: --- für die beiden Fixes siehe die Kommentare von superfrog unten -- 14.2.2006
IF defined DD Set "DD=10%DD%"   
IF defined TT Set "TT=10%TT%"   
IF defined MM Set "MM=10%MM%"   
IF defined hh Set "hh=10%hh%"   
:: -v006b ----Vier Zeilen ohne DeleayEnpansion statt eine FOR..IN..DO-Anweisung

set "hh=%hh:~-2,2%"   
set "MM=%MM:~-2,2%"  
:: ... und den Wochentag will ich auch, wenigstens in zwei Sprachen. 
IF defined DD ( 
set "DD=%DD:~-2,2%"   
IF %DoW%==1 Set "cDow=Sun"   
IF %DoW%==2 Set "cDow=Mon"   
IF %DoW%==3 Set "cDow=Tue"   
IF %DoW%==4 Set "cDow=Wed"   
IF %DoW%==5 Set "cDow=Thu"   
IF %DoW%==6 Set "cDow=Fri"   
IF %DoW%==7 Set "cDow=Sat"   
) 

IF defined TT ( 
set "TT=%TT:~-2,2%"   
IF %DoW%==1 Set "cDow=So"   
IF %DoW%==2 Set "cDow=Mo"   
IF %DoW%==3 Set "cDow=Di"   
IF %DoW%==4 Set "cDow=Mi"   
IF %DoW%==5 Set "cDow=Do"   
IF %DoW%==6 Set "cDow=Fr"   
IF %DoW%==7 Set "cDow=Sa"   

) 
:: so.. hier schlampe ich mal.. 
:: alle 2-stelligen Jahre kleiner 39 werden zu 2001...2038 
:: alle 2-stelligen Jahre größer gleich 39 und kleiner gleich 99 werde zu 1939 bis 1999 

IF not defined YY goto YYskip 
IF %YY% LSS 39 set "YY=20%YY%"   
IF %YY% LEQ 99 set "YY=19%YY%"   
:YYskip 
If not defined JJ goto JJskip 
IF %JJ% LSS 39 set "JJ=20%JJ%"   
IF %JJ% LEQ 99 set "JJ=19%JJ%"   
:JJskip 

IF defined YY set "JJ=%YY%"   
IF defined JJ set "YY=%JJ%"   
IF defined DD Set "TT=%DD%"   
IF defined TT Set "DD=%TT%"   

:: wenn der Parameter AMPM PM ist dann rechne zu den Nachmittagsstunden noch 12 dazu so das aus z.B. 2 PM  14 Uhr wird
if "%AMPM%"=="PM" (  
						If [%hh%]==[00] Set "hh=12"      
						If [%hh%]==[01] Set "hh=13"  
						If [%hh%]==[02] Set "hh=14"  
						If [%hh%]==[03] Set "hh=15"  
						If [%hh%]==[04] Set "hh=16"  
						If [%hh%]==[05] Set "hh=17"  
						If [%hh%]==[06] Set "hh=18"  
						If [%hh%]==[07] Set "hh=19"  
						If [%hh%]==[08] Set "hh=20"  
						If [%hh%]==[09] Set "hh=21"  
						If [%hh%]==[10] Set "hh=22"  
						If [%hh%]==[11] Set "hh=23"  
						If [%hh%]==[12] Set "hh=00"  
                   )

:: Wenn der Parameter Datfor  mit angegeben wurde dann stelle ich das Datum hier um auf TT-MM-JJJJ 

If "%Datfor%"=="MM-TT-JJJJ" Set "DD=%MM%"  
If "%Datfor%"=="MM-TT-JJJJ" Set "MM=%TT%"  
If "%Datfor%"=="MM-TT-JJJJ" Set "TT=%DD%"		  

:: Wenn der Parameter DatFor nicht mit angegeben wurd dann Schlampe ich hier ein bisschen und Stelle 2/3 aller nicht Europaischen Datumsformate um auf TT-MM-JJJJ 
:: Weil einen z.b. 27 Monat gibt es nicht wie hier 5.27.2009 es heißt richtig 27.5.2009 



set "Check-falscher-Monat="  

If %MM% GTR 12 ( set "Check-falscher-Monat=true" )  

If "%Check-falscher-Monat%"=="true" Set "DD=%MM%"  
If "%Check-falscher-Monat%"=="true" Set "MM=%TT%"  
If "%Check-falscher-Monat%"=="true" Set "TT=%DD%"  

set "Check-falscher-Monat="  
	

					
:: Lass sehen, was wir haben....falls kein Parameter /q 
For %%i in (%1 %2 %3 %4 %5 %6) Do If /i %%i==/q goto cleanUp 

For %%i in (INDate INTime %AllDateTimeVars%) do @if defined %%i set %%i 




:cleanUp 
For %%i in (vbssnippet INTime INDate) Do Set "%%i="   
goto :eof 

:Syntax 
ECHO. 
ECHO %~nx0 By Frank / dem Biber aus Bremen 2005 
ECHO. 
ECHO Ermittelt strukturierte Informationen über Datum und Zeit 
ECHO Angezeigt oder optional in Variablen gesetzt werden: 
ECHO %AllDateTimeVars% 
ECHO. 
Echo Syntax: 
ECHO %~nx0 [Datum] [Zeit] [/s^|/u] [/q] [/AMPM] [/DatFor] [/?] 
ECHO. 
ECHO Datum Datumswert wie vom System oder der Dir-Ausgabe geliefert. 
ECHO Default Systemdatum. 
ECHO Zeit Zeit wie vom System oder der Dir-Ausgabe geliefert. Default Systemzeit 
ECHO /s SET Setzt die oben genannten Umgebungsvariablen 
ECHO /u UNSET Löscht die gesetzten Umgebungsvariablen 
ECHO /q QUIET Unterdrückt die Bildschirmanzeige der ermittelten Werte 
ECHO / AMPM wenn dieser Parameter gesetzt ist dann wird bei PM noch 12 Stunden dazuaddiert
ECHO / DaTFor  wenn dieser wert gesetzt ist wir jeweils nach denn Datumsformatwerten (M/d/yyyy,dd.MM.yyyy) 
ECHO   die Monate und Tage richtig in deutsche Format TT.MM.JJJJ umgesetzt
ECHO. /^? Zeigt diese schöne Hilfe 
Goto :eof 
Biber
Biber 22.12.2009 um 16:07:53 Uhr
Goto Top
Moin mycroftone,

vielen Dank fürs Posten deiner Erweiterung.

Ich habe diesen Beitrag eben auch mal als Querverweis beim "Workshop Batch for Runaways III"-Tut nachgetragen.

Und ich denke, wir können jetzt auch diesen Beitrag auf "Gelöst" setzen?

Grüße und ein paar entspannte Tage zum Jahresende
Biber