Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

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

Mitglied: mycroftone

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



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



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-Key: 120652

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

Ausgedruckt am: 24.09.2021 um 03:09 Uhr

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

  • und eine "Russland_2008" oder so mit Inhalt

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

Wenn Du lieber dieses Format haben willst
Russland PROD_DATA_0907_ vom 06.04.2008 11:02"
...okay:
Fettich.

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

Ein erstes Antesten liefert:

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.


Ausgabe des Testschnipsels:

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


Aber ich werde es noch weiter testen
Mitglied: 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.



Mitglied: 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
Heiß diskutierte Beiträge
question
Unternehmensnetzwerk aufbauenbluelightVor 1 TagFrageNetzwerke12 Kommentare

Moin zusammen, erstmal vielen Dank an der Stelle, dass mir beim letzten mal so super geholfen wurde! Aktuelle Situation: -> 5 VMs bei Netcup -> ...

question
Netzwerkdosen verbindenR3nN1979Vor 1 TagFrageInternet7 Kommentare

Hallo, Ich ziehe bald um, und benötige dabei Hilfe, wie ich Netzwerkdosen miteinander verbinden kann. Habe überhaupt keine Ahnung davon, aber mir kann jemand von ...

general
Endpoint AV für FirmenumgebungKauzigVor 1 TagAllgemeinErkennung und -Abwehr18 Kommentare

Hallo, aktuell bin ich am Suchen einer Endpoint AV für meine Firmenumgebung wichtig wäre mir ein zentrales Management sowie ggf. sogar ein Patch System. Aktuell ...

question
Ein Domänenbenutzer für alle MitarbeiterMarabuntaVor 1 TagFrageWindows Userverwaltung6 Kommentare

Hi, ist es möglich/sinnvoll bzw. wie ist es lizenztechnisch, wenn es einen Domänen-Benutzer für alle Mitarbeiter(10) gibt, diese Benutzen eine Branchensoftware in der jeder eigene ...

question
Powershell Logon Script Problematikjoe2017Vor 1 TagFrageBatch & Shell19 Kommentare

Schönen guten Morgen, ich habe eine Frage an die Spezialisten hier. Denn ich bin gerade ratlos und am verzweifeln. Ich habe in meinem Domain Controler ...

question
Hardware Empfehlung für Selbstbau Firewall mit pfSense bzw. OPNsensePete55Vor 17 StundenFrageFirewall12 Kommentare

Hallo Zusammen, an meinem Anschluss von Vodafone (Red Business Internet & Phone 500 Cable) habe ich als Firewall immer noch ein APU1D4 auf dem IPfire ...

question
Was ist die beste Lösung für servergespeicherte Profile für 10 Rechner?Yan2021Vor 19 StundenFrageNetzwerke9 Kommentare

Hallo liebe Admin-User, in einem anderen Thread ging es um die Sicherung von Dienst-PCs per Image. Daraus entstand dann eine Diskussion über servergespeicherte Profile. Da ...

question
Bewertung von Rechnern (Gewichtung von CPU, RAM und Festspeicher)SarekHLVor 1 TagFrageBenchmarks11 Kommentare

Hallo zusammen, ich habe hier eine Aufstellung verschiedener Rechner mit - Leistungsbewertung der CPU mit CPUMark (Quelle: - Größe Arbeitsspeicher - SSD oder HDD Wie ...