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

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

Frage Entwicklung Batch & Shell

Mitglied: mycroftone

mycroftone (Level 1) - Jetzt verbinden

16.07.2009, aktualisiert 18:28 Uhr, 5503 Aufrufe, 9 Kommentare

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


01.
set  "m-date=" 
02.
set  "m-time=" 
03.
set  "am-pm=" 
04.
set  "m-file=" 
05.
echo >dir-aus-amilandin-in-de.txt 
06.
 
07.
for /f "tokens=1-4 " %%a in (dir-aus-amiland.txt) do (  
08.
set m-date=%%a 
09.
set m-time=%%b 
10.
set am-pm=%%c 
11.
set m-file= %%c 
12.
 
13.
call :GET-DATE-TIME-G !m-date! !m-time!  /s /q 
14.
 
15.
if "!am-pm!"=="PM" (  
16.
set /a hh=!hh!+12 
17.
If "!hh!"=="24" ( set hh=00) 
18.
19.
set m-date=!tt!.!mm!.!JJ! 
20.
set m-time=!hh!:!min! 
21.
 
22.
echo "!m-date!" "!m-time!"  in de.  
23.
echo  !m-date!  !m-time! !m-file >>dir-aus-amilandin-in-de.txt 
24.
)
Dieser Quellcode funktioniert.
Jetzt habe ich ihn wie folgt in die Subroutine eingebaut.

01.
 
02.
 
03.
:GET-DATE-TIME-G 
04.
 
05.
::-------snipp GetAllDateTimeInfos.bat -----  
06.
@ echo off & setlocal 
07.
:: v006b Setlocal ohne Zusatz "EnableDelayedExpansion" 
08.
:: (c) Biberware 2005 Placed in the Public Domain Oct 2005 for Educational Purposes  
09.
:: Ermittelt Datums/Zeitvariable aus dem CMD-Environment und stellt sie als Variablen bereit.  
10.
:: Einschränkung: Sollte schon NT oder höher sein. Deshalb die erste Zeile  
11.
:: Vers. 0.02 Minor Bugfix; siehe zweiten Kommentar unten. 14.12.2005 by Biber  
12.
:: Vers. 0.06a Bugfix/Workarounds für Formfeed-Bug W2K und "Set /a 09"-Bug.  
13.
:: -------------- Und alle SETs in Anführungszeichen. Siehe unten. 13.2.2006 
14.
:: Vers. 0.06b Aus Kompat-Gründen jetzt ohne erwartete "DelayedExpansion"-Reg-Voreinstellung. 
15.
IF NOT "%OS%"=="Windows_NT" echo "%0 läuft nur unter WinNT oder höher. Sorry." && GOTO :eof  
16.
If /i [%1]==[/?] goto Syntax  
17.
 
18.
set "us-to-de=" 
19.
 
20.
For %%i in ( %1 %2 %3 %4) Do (  
21.
If /i [%%i]==[/s] Endlocal  
22.
If /i [%%i]==[/u] Endlocal  
23.
If /i [%%i]==[/h] goto Syntax  
24.
 
25.
If /i [%%i]==[PM] set us-to-de=1 
26.
 
27.
)  
28.
 
29.
SET "AllDateTimeVars=DateOrder KW OSKW DoW DoY cDoW DD TT MM JJ YY hh min ss ms"  
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%"  
37.
 
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"  
40.
 
41.
:: Die nächste Code-Zeile ändert nur dann etwas, wenn ein Wochentag mitgeliefert wird.  
42.
:: Aus "Sa 01.10.2005" wird dann "01.10.2005"  
43.
FOR /F "tokens=2" %%i in ("%INDate%") do Set "INDate=%%i" 
44.
:: Beschränkung auf existierende Datumsformate siehe Posting mit CAT unten. 
45.
:: Das Format "Mo, 13. Februar 2006" mit zwei Leerzeichen würde NICHT funktionieren! 
46.
FOR /F "tokens=1-7 delims=:/.-, " %%i in ("%INDate% %INTime%") do (  
47.
     FOR /F "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (  
48.
        for %%@ in ("DateOrder=%%a-%%b-%%c" "%%a=%%i" "%%b=%%j" "%%c=%%k" "hh=%%l" "min=%%m" "ss=%%n" "ms=%%o") do set %%@  
49.
          )  
50.
     )  
51.
 
52.
For %%i in (ss ms) do if not defined %%i set "%%i=00"  
53.
:: ----- v005 Workaround wegen W2K-Formfeed-Bug: Kommata als Deliniter im VBS-Schnipsel-Output. 
54.
SET "vbsSnippet=%temp%\%random%.vbs" 
55.
echo If wscript.arguments.count = 1 Then dDate=wscript.arguments.item(0) Else dDate=Date>%vbssnippet%  
56.
echo Wscript.Echo "x," ^& DatePart("ww",dDate,vbSunday,vbFirstFourDays) ^& "," ^&_>>%vbsSnippet%  
57.
echo DatePart("ww",dDate) ^& "," ^& DatePart("w",dDate) ^& "," ^& DatePart("y",dDate)>>%vbsSnippet%  
58.
 
59.
for /F "delims=, tokens=2-5" %%a in ('cscript //nologo %vbsSnippet% %INDate%') do (  
60.
(Set "KW=%%a" ) && Rem Kalenderwoche nach verbreiteter Berechnung  
61.
(Set "OSKW=%%b" ) && Rem Kalenderwoche nach Betriebssystemvorgaben nicht über GUI änderbar! *lacht  
62.
(Set "DoW=%%c" ) && Rem Day of Week 1=Sonntag, 2= Montag... bei meinen REG-Settings  
63.
(Set "DoY=%%d" ) && Rem Day of Year, Kalendertag  
64.
)  
65.
del %vbssnippet% 
66.
 
67.
:: Tag, Monat und Stunde möchte ich immer zweistellig haben, also mit führender "0"  
68.
:: v006-Fix<s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set /a %%i+=100 </s>  
69.
:: v006-Fix wg. Set /A-Bug. THX an superfrog für den Bugreport. 
70.
:: v006b-Fix-Fix <s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set "%%i=10!%%i!"</s> 
71.
:: --- für die beiden Fixes siehe die Kommentare von superfrog unten -- 14.2.2006 
72.
IF defined DD Set "DD=10%DD%"  
73.
IF defined TT Set "TT=10%TT%"  
74.
IF defined MM Set "MM=10%MM%"  
75.
IF defined hh Set "hh=10%hh%"  
76.
:: -v006b ----Vier Zeilen ohne DeleayEnpansion statt eine FOR..IN..DO-Anweisung 
77.
 
78.
set "hh=%hh:~-2,2%"  
79.
set "MM=%MM:~-2,2%" 
80.
:: ... und den Wochentag will ich auch, wenigstens in zwei Sprachen.  
81.
IF defined DD (  
82.
set "DD=%DD:~-2,2%"  
83.
IF %DoW%==1 Set "cDow=Sun"  
84.
IF %DoW%==2 Set "cDow=Mon"  
85.
IF %DoW%==3 Set "cDow=Tue"  
86.
IF %DoW%==4 Set "cDow=Wed"  
87.
IF %DoW%==5 Set "cDow=Thu"  
88.
IF %DoW%==6 Set "cDow=Fri"  
89.
IF %DoW%==7 Set "cDow=Sat"  
90.
)  
91.
 
92.
IF defined TT (  
93.
set "TT=%TT:~-2,2%"  
94.
IF %DoW%==1 Set "cDow=So"  
95.
IF %DoW%==2 Set "cDow=Mo"  
96.
IF %DoW%==3 Set "cDow=Di"  
97.
IF %DoW%==4 Set "cDow=Mi"  
98.
IF %DoW%==5 Set "cDow=Do"  
99.
IF %DoW%==6 Set "cDow=Fr"  
100.
IF %DoW%==7 Set "cDow=Sa"  
101.
 
102.
)  
103.
:: so.. hier schlampe ich mal..  
104.
:: alle 2-stelligen Jahre kleiner 39 werden zu 2001...2038  
105.
:: alle 2-stelligen Jahre größer gleich 39 und kleiner gleich 99 werde zu 1939 bis 1999  
106.
 
107.
IF not defined YY goto YYskip  
108.
IF %YY% LSS 39 set "YY=20%YY%"  
109.
IF %YY% LEQ 99 set "YY=19%YY%"  
110.
:YYskip  
111.
If not defined JJ goto JJskip  
112.
IF %JJ% LSS 39 set "JJ=20%JJ%"  
113.
IF %JJ% LEQ 99 set "JJ=19%JJ%"  
114.
:JJskip  
115.
 
116.
IF defined YY set "JJ=%YY%"  
117.
IF defined JJ set "YY=%JJ%"  
118.
IF defined DD Set "TT=%DD%"  
119.
IF defined TT Set "DD=%TT%"  
120.
:: Lass sehen, was wir haben....falls kein Parameter /q  
121.
For %%i in (%1 %2 %3 %4) Do If /i %%i==/q goto cleanUp  
122.
 
123.
For %%i in (INDate INTime %AllDateTimeVars%) do @if defined %%i set %%i  
124.
 
125.
 
126.
if "%us-to-de%"=="1" (  
127.
set /a hh=!hh!+12 
128.
If "!hh!"=="24" ( set hh=00) 
129.
130.
 
131.
 
132.
:cleanUp  
133.
For %%i in (vbssnippet INTime INDate) Do Set "%%i="  
134.
goto :eof  
135.
 
136.
:Syntax  
137.
ECHO.  
138.
ECHO %~nx0 By Frank / dem Biber aus Bremen 2005  
139.
ECHO.  
140.
ECHO Ermittelt strukturierte Informationen über Datum und Zeit  
141.
ECHO Angezeigt oder optional in Variablen gesetzt werden:  
142.
ECHO %AllDateTimeVars%  
143.
ECHO.  
144.
Echo Syntax:  
145.
ECHO %~nx0 [Datum] [Zeit] [/s^|/u] [/q] [/?]  
146.
ECHO.  
147.
ECHO Datum Datumswert wie vom System oder der Dir-Ausgabe geliefert.  
148.
ECHO Default Systemdatum.  
149.
ECHO Zeit Zeit wie vom System oder der Dir-Ausgabe geliefert. Default Systemzeit  
150.
ECHO /s SET Setzt die oben genannten Umgebungsvariablen  
151.
ECHO /u UNSET Löscht die gesetzten Umgebungsvariablen  
152.
ECHO /q QUIET Unterdrückt die Bildschirmanzeige der ermittelten Werte  
153.
ECHO. /^? Zeigt diese schöne Hilfe  
154.
Goto :eof  
155.
 

Bekomme aber die Fehlermeldung

Fehlere Operator


Also was mache ich falsch

biber du solltest dich doch mit deinem Code an besten auskenne
Mitglied: Biber
17.07.2009 um 00:34 Uhr
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
Bitte warten ..
Mitglied: mycroftone
17.07.2009 um 14:52 Uhr
Moin biber, gestern abend ging nicht das Fernsehprogramm sondern Kind und Frau vor

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.
Bitte warten ..
Mitglied: Biber
17.07.2009 um 18:13 Uhr
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.]
01.
>type e:\work\Russland_2008.txt 
02.
06.02.2008 16:02 <DIR> PROD_DATA_1007_ 
03.
06.03.2008 23:02 <DIR> PROD_DATA_1107_ 
04.
06.04.2008 11:02 <DIR> PROD_DATA_0907_ 
05.
 
06.
(=17:06:52  D:\temp=) 
07.
>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] 
08.
TT[06] MM[02] JJJJ[2008] zeit[16:02] Dirname[PROD_DATA_1007_] 
09.
TT[06] MM[03] JJJJ[2008] zeit[23:02] Dirname[PROD_DATA_1107_] 
10.
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:
01.
>for /F "tokens=1-4,6* delims=/. " %a in (e:\work\Russland_2008.txt) do @echo Russland %e %a.%b.%c %d 
02.
Russland PROD_DATA_1007_ 06.02.2008 16:02 
03.
Russland PROD_DATA_1107_ 06.03.2008 23:02 
04.
Russland PROD_DATA_0907_ 06.04.2008 11:02
Fettich.

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

Ein erstes Antesten liefert:
01.
>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] 
02.
MM[07] TT[17] JJJJ[2009] hh[12] mm[46] AMPM[AM] Dirname [PROD_Archiv_0309_] 
03.
MM[07] TT[19] JJJJ[2009] hh[11] mm[45] AMPM[PM] Dirname [PROD_Archiv_0509_] 
04.
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.

01.
::--- TestIndien 
02.
@echo off & setlocal EnableDelayedExpansion 
03.
 
04.
for /F "tokens=1-6,8* delims=/.: " %%a in (e:\work\indien_2009.txt) do ( 
05.
    echo ---test--1- ] MM[%%a] TT[%%b] JJJJ[%%c] hh[%%d] mm[%%e] AMPM[%%f] Dirname [%%g] 
06.
 
07.
    if [%%f]==[AM] ( 
08.
        Set "HH=%%d" 
09.
    ) Else ( 
10.
       If [%%d]==[00] Set "hh=12"     
11.
       If [%%d]==[01] Set "hh=13" 
12.
       If [%%d]==[02] Set "hh=14" 
13.
       If [%%d]==[03] Set "hh=15" 
14.
       If [%%d]==[04] Set "hh=16" 
15.
       If [%%d]==[05] Set "hh=17" 
16.
       If [%%d]==[06] Set "hh=18" 
17.
       If [%%d]==[07] Set "hh=19" 
18.
       If [%%d]==[08] Set "hh=20" 
19.
       If [%%d]==[09] Set "hh=21" 
20.
       If [%%d]==[10] Set "hh=22" 
21.
       If [%%d]==[11] Set "hh=23" 
22.
 
23.
       If [%%d]==[12] Set "hh=00" 
24.
25.
    echo ---test--2- formatierte Zeile: 
26.
    Echo Indien %%g %%b.%%a.%%c !hh!:%%e  
27.
28.
 
Ausgabe des Testschnipsels:
01.
>e:\work\TestIndien 
02.
---test--1- ] MM[07] TT[17] JJJJ[2009] hh[12] mm[46] AMPM[AM] Dirname [PROD_Archiv_0309_] 
03.
---test--2- formatierte Zeile: 
04.
Indien PROD_Archiv_0309_ 17.07.2009 12:46 
05.
---test--1- ] MM[07] TT[19] JJJJ[2009] hh[11] mm[45] AMPM[PM] Dirname [PROD_Archiv_0509_] 
06.
---test--2- formatierte Zeile: 
07.
Indien PROD_Archiv_0509_ 19.07.2009 23:45 
08.
---test--1- ] MM[07] TT[18] JJJJ[2009] hh[04] mm[45] AMPM[PM] Dirname [PROD_Archiv_0609_] 
09.
---test--2- formatierte Zeile: 
10.
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
Bitte warten ..
Mitglied: mycroftone
17.07.2009 um 18:26 Uhr
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.
Bitte warten ..
Mitglied: Biber
17.07.2009 um 20:28 Uhr
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
Bitte warten ..
Mitglied: mycroftone
17.07.2009 um 20:50 Uhr
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.
Bitte warten ..
Mitglied: mycroftone
24.07.2009 um 13:11 Uhr
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.

01.
  
02.
 
03.
 
04.
:GET-DATE-TIME-G 
05.
 
06.
::-------snipp GetAllDateTimeInfos.bat -----  
07.
 
08.
@ echo off & setlocal 
09.
:: v006b Setlocal ohne Zusatz "EnableDelayedExpansion" 
10.
:: (c) Biberware 2005 Placed in the Public Domain Oct 2005 for Educational Purposes  
11.
:: Ermittelt Datums/Zeitvariable aus dem CMD-Environment und stellt sie als Variablen bereit.  
12.
:: Einschränkung: Sollte schon NT oder höher sein. Deshalb die erste Zeile  
13.
:: Vers. 0.02 Minor Bugfix; siehe zweiten Kommentar unten. 14.12.2005 by Biber  
14.
:: Vers. 0.06a Bugfix/Workarounds für Formfeed-Bug W2K und "Set /a 09"-Bug.  
15.
:: -------------- Und alle SETs in Anführungszeichen. Siehe unten. 13.2.2006 
16.
:: Vers. 0.06b Aus Kompat-Gründen jetzt ohne erwartete "DelayedExpansion"-Reg-Voreinstellung. 
17.
IF NOT "%OS%"=="Windows_NT" echo "%0 läuft nur unter WinNT oder höher. Sorry." && GOTO :eof  
18.
If /i [%1]==[/?] goto Syntax  
19.
 
20.
For %%i in ( %1 %2 %3 %4 %5) Do (  
21.
If /i [%%i]==[/s] Endlocal  
22.
If /i [%%i]==[/u] Endlocal  
23.
If /i [%%i]==[/h] goto Syntax  
24.
)  
25.
 
26.
SET "AllDateTimeVars=DateOrder KW OSKW DoW DoY cDoW DD TT MM JJ YY hh min ss ms AMPM"  
27.
FOR %%i in (%AllDateTimeVars%) do @if defined %%i set "%%i="  
28.
:: Datum will ich OHNE Wochentag haben. Zwischenschritt mit INDate  
29.
 
30.
:: erweitert, Parameter erlaubt.. Param1=Datumswert;Param2=Zeit  
31.
For %%i in (%1 %2 %3) Do If /i %%i==/u goto :Cleanup  
32.
Set "INDate=%date%"  
33.
Set "INTime=%time%"  
34.
 
35.
If NOT [%1]==[] If /i [%1] NEQ [/q] If /i [%1] NEQ [/s] set "INDate=%1"  
36.
If NOT [%2]==[] If /i [%2] NEQ [/q] If /i [%2] NEQ [/s] set "INTime=%2"  
37.
If [%3]==[PM] ( 
38.
	     set "AMPM=PM"  
39.
	     ) else ( 
40.
	   Set "AMPM=AM" 
41.
42.
 
43.
:: Die nächste Code-Zeile ändert nur dann etwas, wenn ein Wochentag mitgeliefert wird.  
44.
:: Aus "Sa 01.10.2005" wird dann "01.10.2005"  
45.
FOR /F "tokens=2" %%i in ("%INDate%") do Set "INDate=%%i" 
46.
:: Beschränkung auf existierende Datumsformate siehe Posting mit CAT unten. 
47.
:: Das Format "Mo, 13. Februar 2006" mit zwei Leerzeichen würde NICHT funktionieren! 
48.
FOR /F "tokens=1-7 delims=:/.-, " %%i in ("%INDate% %INTime%") do (  
49.
     FOR /F "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (  
50.
        for %%@ in ("DateOrder=%%a-%%b-%%c" "%%a=%%i" "%%b=%%j" "%%c=%%k" "hh=%%l" "min=%%m" "ss=%%n" "ms=%%o") do set %%@  
51.
          )  
52.
     )  
53.
 
54.
For %%i in (ss ms) do if not defined %%i set "%%i=00"  
55.
:: ----- v005 Workaround wegen W2K-Formfeed-Bug: Kommata als Deliniter im VBS-Schnipsel-Output. 
56.
SET "vbsSnippet=%temp%\%random%.vbs" 
57.
echo If wscript.arguments.count = 1 Then dDate=wscript.arguments.item(0) Else dDate=Date>%vbssnippet%  
58.
echo Wscript.Echo "x," ^& DatePart("ww",dDate,vbSunday,vbFirstFourDays) ^& "," ^&_>>%vbsSnippet%  
59.
echo DatePart("ww",dDate) ^& "," ^& DatePart("w",dDate) ^& "," ^& DatePart("y",dDate)>>%vbsSnippet%  
60.
 
61.
for /F "delims=, tokens=2-5" %%a in ('cscript //nologo %vbsSnippet% %INDate%') do (  
62.
(Set "KW=%%a" ) && Rem Kalenderwoche nach verbreiteter Berechnung  
63.
(Set "OSKW=%%b" ) && Rem Kalenderwoche nach Betriebssystemvorgaben nicht über GUI änderbar! *lacht  
64.
(Set "DoW=%%c" ) && Rem Day of Week 1=Sonntag, 2= Montag... bei meinen REG-Settings  
65.
(Set "DoY=%%d" ) && Rem Day of Year, Kalendertag  
66.
)  
67.
del %vbssnippet% 
68.
 
69.
:: Tag, Monat und Stunde möchte ich immer zweistellig haben, also mit führender "0"  
70.
:: v006-Fix<s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set /a %%i+=100 </s>  
71.
:: v006-Fix wg. Set /A-Bug. THX an superfrog für den Bugreport. 
72.
:: v006b-Fix-Fix <s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set "%%i=10!%%i!"</s> 
73.
:: --- für die beiden Fixes siehe die Kommentare von superfrog unten -- 14.2.2006 
74.
IF defined DD Set "DD=10%DD%"  
75.
IF defined TT Set "TT=10%TT%"  
76.
IF defined MM Set "MM=10%MM%"  
77.
IF defined hh Set "hh=10%hh%"  
78.
:: -v006b ----Vier Zeilen ohne DeleayEnpansion statt eine FOR..IN..DO-Anweisung 
79.
 
80.
set "hh=%hh:~-2,2%"  
81.
set "MM=%MM:~-2,2%" 
82.
:: ... und den Wochentag will ich auch, wenigstens in zwei Sprachen.  
83.
IF defined DD (  
84.
set "DD=%DD:~-2,2%"  
85.
IF %DoW%==1 Set "cDow=Sun"  
86.
IF %DoW%==2 Set "cDow=Mon"  
87.
IF %DoW%==3 Set "cDow=Tue"  
88.
IF %DoW%==4 Set "cDow=Wed"  
89.
IF %DoW%==5 Set "cDow=Thu"  
90.
IF %DoW%==6 Set "cDow=Fri"  
91.
IF %DoW%==7 Set "cDow=Sat"  
92.
)  
93.
 
94.
IF defined TT (  
95.
set "TT=%TT:~-2,2%"  
96.
IF %DoW%==1 Set "cDow=So"  
97.
IF %DoW%==2 Set "cDow=Mo"  
98.
IF %DoW%==3 Set "cDow=Di"  
99.
IF %DoW%==4 Set "cDow=Mi"  
100.
IF %DoW%==5 Set "cDow=Do"  
101.
IF %DoW%==6 Set "cDow=Fr"  
102.
IF %DoW%==7 Set "cDow=Sa"  
103.
 
104.
)  
105.
:: so.. hier schlampe ich mal..  
106.
:: alle 2-stelligen Jahre kleiner 39 werden zu 2001...2038  
107.
:: alle 2-stelligen Jahre größer gleich 39 und kleiner gleich 99 werde zu 1939 bis 1999  
108.
 
109.
IF not defined YY goto YYskip  
110.
IF %YY% LSS 39 set "YY=20%YY%"  
111.
IF %YY% LEQ 99 set "YY=19%YY%"  
112.
:YYskip  
113.
If not defined JJ goto JJskip  
114.
IF %JJ% LSS 39 set "JJ=20%JJ%"  
115.
IF %JJ% LEQ 99 set "JJ=19%JJ%"  
116.
:JJskip  
117.
 
118.
IF defined YY set "JJ=%YY%"  
119.
IF defined JJ set "YY=%JJ%"  
120.
IF defined DD Set "TT=%DD%"  
121.
IF defined TT Set "DD=%TT%"  
122.
 
123.
 
124.
if "%AMPM%"=="PM" ( 
125.
		If [%hh%]==[00] Set "hh=12"     
126.
		If [%hh%]==[01] Set "hh=13" 
127.
		If [%hh%]==[02] Set "hh=14" 
128.
		If [%hh%]==[03] Set "hh=15" 
129.
		If [%hh%]==[04] Set "hh=16" 
130.
		If [%hh%]==[05] Set "hh=17" 
131.
		If [%hh%]==[06] Set "hh=18" 
132.
		If [%hh%]==[07] Set "hh=19" 
133.
		If [%hh%]==[08] Set "hh=20" 
134.
		If [%hh%]==[09] Set "hh=21" 
135.
		If [%hh%]==[10] Set "hh=22" 
136.
		If [%hh%]==[11] Set "hh=23" 
137.
		If [%hh%]==[12] Set "hh=00" 
138.
                                      )  
139.
 
140.
 
141.
:: Lass sehen, was wir haben....falls kein Parameter /q  
142.
For %%i in (%1 %2 %3 %4) Do If /i %%i==/q goto cleanUp  
143.
 
144.
For %%i in (INDate INTime %AllDateTimeVars%) do @if defined %%i set %%i  
145.
 
146.
:cleanUp  
147.
For %%i in (vbssnippet INTime INDate) Do Set "%%i="  
148.
goto :eof  
149.
 
150.
:Syntax  
151.
ECHO.  
152.
ECHO %~nx0 By Frank / dem Biber aus Bremen 2005  
153.
ECHO.  
154.
ECHO Ermittelt strukturierte Informationen über Datum und Zeit  
155.
ECHO Angezeigt oder optional in Variablen gesetzt werden:  
156.
ECHO %AllDateTimeVars%  
157.
ECHO.  
158.
Echo Syntax:  
159.
ECHO %~nx0 [Datum] [Zeit] [/s^|/u] [/q] [/?]  
160.
ECHO.  
161.
ECHO Datum Datumswert wie vom System oder der Dir-Ausgabe geliefert.  
162.
ECHO Default Systemdatum.  
163.
ECHO Zeit Zeit wie vom System oder der Dir-Ausgabe geliefert. Default Systemzeit  
164.
ECHO /s SET Setzt die oben genannten Umgebungsvariablen  
165.
ECHO /u UNSET Löscht die gesetzten Umgebungsvariablen  
166.
ECHO /q QUIET Unterdrückt die Bildschirmanzeige der ermittelten Werte  
167.
ECHO. /^? Zeigt diese schöne Hilfe  
168.
Goto :eof  
169.
 
Aber ich werde es noch weiter testen
Bitte warten ..
Mitglied: mycroftone
22.12.2009 um 15:42 Uhr
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.


01.
  
02.
 
03.
 
04.
:GET-DATE-TIME-G 
05.
 
06.
::-------snipp GetAllDateTimeInfos.bat -----  
07.
 
08.
@ echo off & setlocal 
09.
:: v006b Setlocal ohne Zusatz "EnableDelayedExpansion" 
10.
:: (c) Biberware 2005 Placed in the Public Domain Oct 2005 for Educational Purposes  
11.
:: Ermittelt Datums/Zeitvariable aus dem CMD-Environment und stellt sie als Variablen bereit.  
12.
:: Einschränkung: Sollte schon NT oder höher sein. Deshalb die erste Zeile  
13.
:: Vers. 0.02 Minor Bugfix; siehe zweiten Kommentar unten. 14.12.2005 by Biber  
14.
:: Vers. 0.06a Bugfix/Workarounds für Formfeed-Bug W2K und "Set /a 09"-Bug.  
15.
:: -------------- Und alle SETs in Anführungszeichen. Siehe unten. 13.2.2006 
16.
:: Vers. 0.06b Aus Kompat-Gründen jetzt ohne erwartete "DelayedExpansion"-Reg-Voreinstellung. 
17.
IF NOT "%OS%"=="Windows_NT" echo "%0 läuft nur unter WinNT oder höher. Sorry." && GOTO :eof  
18.
If /i [%1]==[/?] goto Syntax  
19.
 
20.
 
21.
 
22.
For %%i in ( %1 %2 %3 %4 %5) Do (  
23.
If /i [%%i]==[/s] Endlocal  
24.
If /i [%%i]==[/u] Endlocal  
25.
If /i [%%i]==[/h] goto Syntax  
26.
)  
27.
 
28.
 
29.
SET "AllDateTimeVars=DateOrder KW OSKW DoW DoY cDoW DD TT MM JJ YY hh min ss ms AMPM Datfor "  
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%"  
37.
 
38.
 
39.
If NOT [%1]==[] If /i [%1] NEQ [/q] If /i [%1] NEQ [/s] set "INDate=%1"  
40.
If NOT [%2]==[] If /i [%2] NEQ [/q] If /i [%2] NEQ [/s] set "INTime=%2"  
41.
If [%3]==[PM] ( set "AMPM=PM" ) 
42.
If [%3]==[AM] ( set "AMPM=AM" ) 
43.
 
44.
If [%3]==[M/d/yyyy] ( set "Datfor=MM-TT-JJJJ" ) 
45.
If [%3]==[dd.MM.yyyy] ( set "Datfor=TT-MM-JJJJ" ) 
46.
 
47.
If [%4]==[M/d/yyyy] ( set "Datfor=MM-TT-JJJJ" ) 
48.
If [%4]==[dd.MM.yyyy] ( set "Datfor=TT-MM-JJJJ" ) 
49.
 
50.
			    
51.
:: Die nächste Code-Zeile ändert nur dann etwas, wenn ein Wochentag mitgeliefert wird.  
52.
:: Aus "Sa 01.10.2005" wird dann "01.10.2005"  
53.
FOR /F "tokens=2" %%i in ("%INDate%") do Set "INDate=%%i" 
54.
:: Beschränkung auf existierende Datumsformate siehe Posting mit CAT unten. 
55.
:: Das Format "Mo, 13. Februar 2006" mit zwei Leerzeichen würde NICHT funktionieren! 
56.
FOR /F "tokens=1-7 delims=:/.-, " %%i in ("%INDate% %INTime%") do (  
57.
     FOR /F "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (  
58.
        for %%@ in ("DateOrder=%%a-%%b-%%c" "%%a=%%i" "%%b=%%j" "%%c=%%k" "hh=%%l" "min=%%m" "ss=%%n" "ms=%%o") do set %%@  
59.
          )  
60.
     )  
61.
 
62.
For %%i in (ss ms) do if not defined %%i set "%%i=00"  
63.
:: ----- v005 Workaround wegen W2K-Formfeed-Bug: Kommata als Deliniter im VBS-Schnipsel-Output. 
64.
SET "vbsSnippet=%temp%\%random%.vbs" 
65.
echo If wscript.arguments.count = 1 Then dDate=wscript.arguments.item(0) Else dDate=Date>%vbssnippet%  
66.
echo Wscript.Echo "x," ^& DatePart("ww",dDate,vbSunday,vbFirstFourDays) ^& "," ^&_>>%vbsSnippet%  
67.
echo DatePart("ww",dDate) ^& "," ^& DatePart("w",dDate) ^& "," ^& DatePart("y",dDate)>>%vbsSnippet%  
68.
 
69.
for /F "delims=, tokens=2-5" %%a in ('cscript //nologo %vbsSnippet% %INDate%') do (  
70.
(Set "KW=%%a" ) && Rem Kalenderwoche nach verbreiteter Berechnung  
71.
(Set "OSKW=%%b" ) && Rem Kalenderwoche nach Betriebssystemvorgaben nicht über GUI änderbar! *lacht  
72.
(Set "DoW=%%c" ) && Rem Day of Week 1=Sonntag, 2= Montag... bei meinen REG-Settings  
73.
(Set "DoY=%%d" ) && Rem Day of Year, Kalendertag  
74.
)  
75.
del %vbssnippet% 
76.
 
77.
:: Tag, Monat und Stunde möchte ich immer zweistellig haben, also mit führender "0"  
78.
:: v006-Fix<s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set /a %%i+=100 </s>  
79.
:: v006-Fix wg. Set /A-Bug. THX an superfrog für den Bugreport. 
80.
:: v006b-Fix-Fix <s>For %%i in (DD TT MM hh) DO IF DEFINED %%i Set "%%i=10!%%i!"</s> 
81.
:: --- für die beiden Fixes siehe die Kommentare von superfrog unten -- 14.2.2006 
82.
IF defined DD Set "DD=10%DD%"  
83.
IF defined TT Set "TT=10%TT%"  
84.
IF defined MM Set "MM=10%MM%"  
85.
IF defined hh Set "hh=10%hh%"  
86.
:: -v006b ----Vier Zeilen ohne DeleayEnpansion statt eine FOR..IN..DO-Anweisung 
87.
 
88.
set "hh=%hh:~-2,2%"  
89.
set "MM=%MM:~-2,2%" 
90.
:: ... und den Wochentag will ich auch, wenigstens in zwei Sprachen.  
91.
IF defined DD (  
92.
set "DD=%DD:~-2,2%"  
93.
IF %DoW%==1 Set "cDow=Sun"  
94.
IF %DoW%==2 Set "cDow=Mon"  
95.
IF %DoW%==3 Set "cDow=Tue"  
96.
IF %DoW%==4 Set "cDow=Wed"  
97.
IF %DoW%==5 Set "cDow=Thu"  
98.
IF %DoW%==6 Set "cDow=Fri"  
99.
IF %DoW%==7 Set "cDow=Sat"  
100.
)  
101.
 
102.
IF defined TT (  
103.
set "TT=%TT:~-2,2%"  
104.
IF %DoW%==1 Set "cDow=So"  
105.
IF %DoW%==2 Set "cDow=Mo"  
106.
IF %DoW%==3 Set "cDow=Di"  
107.
IF %DoW%==4 Set "cDow=Mi"  
108.
IF %DoW%==5 Set "cDow=Do"  
109.
IF %DoW%==6 Set "cDow=Fr"  
110.
IF %DoW%==7 Set "cDow=Sa"  
111.
 
112.
)  
113.
:: so.. hier schlampe ich mal..  
114.
:: alle 2-stelligen Jahre kleiner 39 werden zu 2001...2038  
115.
:: alle 2-stelligen Jahre größer gleich 39 und kleiner gleich 99 werde zu 1939 bis 1999  
116.
 
117.
IF not defined YY goto YYskip  
118.
IF %YY% LSS 39 set "YY=20%YY%"  
119.
IF %YY% LEQ 99 set "YY=19%YY%"  
120.
:YYskip  
121.
If not defined JJ goto JJskip  
122.
IF %JJ% LSS 39 set "JJ=20%JJ%"  
123.
IF %JJ% LEQ 99 set "JJ=19%JJ%"  
124.
:JJskip  
125.
 
126.
IF defined YY set "JJ=%YY%"  
127.
IF defined JJ set "YY=%JJ%"  
128.
IF defined DD Set "TT=%DD%"  
129.
IF defined TT Set "DD=%TT%"  
130.
 
131.
:: wenn der Parameter AMPM PM ist dann rechne zu den Nachmittagsstunden noch 12 dazu so das aus z.B. 2 PM  14 Uhr wird 
132.
if "%AMPM%"=="PM" ( 
133.
						If [%hh%]==[00] Set "hh=12"     
134.
						If [%hh%]==[01] Set "hh=13" 
135.
						If [%hh%]==[02] Set "hh=14" 
136.
						If [%hh%]==[03] Set "hh=15" 
137.
						If [%hh%]==[04] Set "hh=16" 
138.
						If [%hh%]==[05] Set "hh=17" 
139.
						If [%hh%]==[06] Set "hh=18" 
140.
						If [%hh%]==[07] Set "hh=19" 
141.
						If [%hh%]==[08] Set "hh=20" 
142.
						If [%hh%]==[09] Set "hh=21" 
143.
						If [%hh%]==[10] Set "hh=22" 
144.
						If [%hh%]==[11] Set "hh=23" 
145.
						If [%hh%]==[12] Set "hh=00" 
146.
147.
 
148.
:: Wenn der Parameter Datfor  mit angegeben wurde dann stelle ich das Datum hier um auf TT-MM-JJJJ  
149.
 
150.
If "%Datfor%"=="MM-TT-JJJJ" Set "DD=%MM%" 
151.
If "%Datfor%"=="MM-TT-JJJJ" Set "MM=%TT%" 
152.
If "%Datfor%"=="MM-TT-JJJJ" Set "TT=%DD%"		 
153.
 
154.
:: 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  
155.
:: Weil einen z.b. 27 Monat gibt es nicht wie hier 5.27.2009 es heißt richtig 27.5.2009  
156.
 
157.
 
158.
 
159.
set "Check-falscher-Monat=" 
160.
 
161.
If %MM% GTR 12 ( set "Check-falscher-Monat=true" ) 
162.
 
163.
If "%Check-falscher-Monat%"=="true" Set "DD=%MM%" 
164.
If "%Check-falscher-Monat%"=="true" Set "MM=%TT%" 
165.
If "%Check-falscher-Monat%"=="true" Set "TT=%DD%" 
166.
 
167.
set "Check-falscher-Monat=" 
168.
	 
169.
 
170.
					 
171.
:: Lass sehen, was wir haben....falls kein Parameter /q  
172.
For %%i in (%1 %2 %3 %4 %5 %6) Do If /i %%i==/q goto cleanUp  
173.
 
174.
For %%i in (INDate INTime %AllDateTimeVars%) do @if defined %%i set %%i  
175.
 
176.
 
177.
 
178.
 
179.
:cleanUp  
180.
For %%i in (vbssnippet INTime INDate) Do Set "%%i="  
181.
goto :eof  
182.
 
183.
:Syntax  
184.
ECHO.  
185.
ECHO %~nx0 By Frank / dem Biber aus Bremen 2005  
186.
ECHO.  
187.
ECHO Ermittelt strukturierte Informationen über Datum und Zeit  
188.
ECHO Angezeigt oder optional in Variablen gesetzt werden:  
189.
ECHO %AllDateTimeVars%  
190.
ECHO.  
191.
Echo Syntax:  
192.
ECHO %~nx0 [Datum] [Zeit] [/s^|/u] [/q] [/AMPM] [/DatFor] [/?]  
193.
ECHO.  
194.
ECHO Datum Datumswert wie vom System oder der Dir-Ausgabe geliefert.  
195.
ECHO Default Systemdatum.  
196.
ECHO Zeit Zeit wie vom System oder der Dir-Ausgabe geliefert. Default Systemzeit  
197.
ECHO /s SET Setzt die oben genannten Umgebungsvariablen  
198.
ECHO /u UNSET Löscht die gesetzten Umgebungsvariablen  
199.
ECHO /q QUIET Unterdrückt die Bildschirmanzeige der ermittelten Werte  
200.
ECHO / AMPM wenn dieser Parameter gesetzt ist dann wird bei PM noch 12 Stunden dazuaddiert 
201.
ECHO / DaTFor  wenn dieser wert gesetzt ist wir jeweils nach denn Datumsformatwerten (M/d/yyyy,dd.MM.yyyy)  
202.
ECHO   die Monate und Tage richtig in deutsche Format TT.MM.JJJJ umgesetzt 
203.
ECHO. /^? Zeigt diese schöne Hilfe  
204.
Goto :eof  
205.
 
206.
 
Bitte warten ..
Mitglied: Biber
22.12.2009 um 16:07 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Switche und Hubs
Time Sensitive Network (TSN)

Frage von laster zum Thema Switche und Hubs ...

Entwicklung
gelöst Get ip from external txt file and use in vbscript (5)

Frage von thankusomuch zum Thema Entwicklung ...

Batch & Shell
gelöst Get-WmiObject, nach Netzwerkadapter filtern (11)

Frage von Flodsche zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...