Systemdatum auslesen und als Verzeichnis umfunktionieren?

Du hast eine Frage aber bist neu im Thema?
Antworten
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Systemdatum auslesen und als Verzeichnis umfunktionieren?

Beitrag von frank9652 »

Ich möchte das Systemdatum unter DOS 6.22 auslesen, und als Verzeichnisnamen anlegen um anschließend eine Datensicherung in das Verzeichnis vornehmen.

Beispiel:
Systemdatum des Date-Befehls:
Di, 04-15-2008

Daraus soll das Verzeichnis 080415 (Jahr, Monat, Tag) werden, in das dann die Datensicherung gemacht wird.

Meine Datensicherung funktioniert schon, das Verzeichnis muß ich aber immer per Hand anlegen. Kann ich das per Batch automatisieren?

Gruß Frank
Benutzeravatar
Jinsu
MemMaker-Benutzer
Beiträge: 79
Registriert: Di 8. Mär 2005, 11:14
Wohnort: NRW
Kontaktdaten:

Beitrag von Jinsu »

Wir hatten schon einmal ein ähnliches Thema, da gab's aber bisher keine Lösung, wenn ich mich recht erinnere.

Vielleicht hilft diese Seite weiter, da mögen zwar einige Beispiele unter DOS nicht unbedingt funktionieren, aber es gibt einige Anstösse, die helfen könnten:

http://www.robvanderwoude.com/datetime.html

Das Topic "Date and Time using PROMPT" könnte der Lösung des Problems schon recht nahe sein und würde unter DOS 6.22 funktionieren.
Man müsste das Ergebnis nur als Variable speichern und kann es dann als Parameter zur Verzeichniserstellung verwenden.
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Beitrag von frank9652 »

Unter einer Tabellenkalkulation wüßte ich es.
Das Jahr, den Monat und den Tag separat abfragen, und als String anders wieder zusammensetzen.

Gruß Frank
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

Also mal als Beispiel fuer ein englisches DOS 6.22:

1. Datei datedir.bat:
ver | date | find /I "current date is" > temp.dat
edlin temp.dat < befehle.txt
copy/B 1.txt + temp.dat setit.bat
call setit.bat
md %TIME%


2. Datei befehle.txt:
1 rCurrent date is @
1 rSun @
1 rMon @
1 rTue @
1 rWed @
1 rThu @
1 rFri @
1 rSat @
1 r-@
1 r-@
e

3. Datei 1.txt:
SET TIME=

Erklaerung:
Bei der zweiten Datei sind alle hier als @ markierten Zeichen STRG-Z, also Dezimal 26, bzw. im Hexeditor 1A.

Bei der dritten Datei folgt hinter dem Gleichheitszeichen KEIN Zeilenumbruch.

Fuer ein zB deutsches 6.22 ist das recht einfach umzuschreiben.

Funktionsweise:
Mit Find wird nur die Zeile von Date in eine Datei gegeben, die das Datum enthaelt.
Mit den edlin Befehlen wird alles was nicht zum Datum durch nichts ersetzt.
Dann wird eine Batch zusammengebaut, die die Umgebungsvariable setzt, die dann zum anlegen des Verzeichnisses verwendet wird.
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Beitrag von frank9652 »

Die folgende Batch macht "fast" genau was ich will, nur die Anpassung an meine Bedürfnisse bekomme ich nicht hin.
Kann mir da jemand helfen?

--- batch on ---

@echo %dbgn% off
for %%v in (md cd) do %%v @tmp@
echo @prompt set _D=$D$_> ~tmpA.bat
%comspec% /e:2048 /c ~tmpA.bat > ~tmpB.bat
call ~tmpB.bat
echo set DOW=%%DD%%> ~tmpA.bat
echo set DD=%%MM%%>>~tmpA.bat
echo set MM=%%YYYY%%>>~tmpA.bat
echo set YYYY=%%1>>~tmpA.bat
for %%v in (%_D%) do call ~tmpA.bat %%v
echo @prompt set MM=$%MM%$_set YYYY=$%YYYY%$_>~tmpA.bat
%comspec% /e:2048 /c ~tmpA.bat > ~tmpB.bat
for %%v in (~tmpB.bat del) do call %%v ~tmp?.bat
for %%v in (cd.. rd.\@tmp@) do %%v
echo YYYY=%YYYY% MM=%MM% DD=%DD% DOW=%DOW%

md %yyyy%

--- batch off ---

Obige Batch hat nur folgende zwei Schönheitsfehler...

Problem 1:
Das File erzeugt ein Verzeichnis, das aus "Tag-Monat-Jahr" besteht. -Jeweils mit einem Bindestrich dazwischen.
Damit die Sicherungen der Reihe nach angezeigt werden, möchte ich aber gerne ein Verzeichnis das aus "Jahr-Monat-Tag" besteht.

Problem 2:
Zwischen Tag, Monat und Jahr werden Bindestriche gesetzt, dadurch wird die letzte Zahl (bzw. die letzten beiden Zahlen) abgeschnitten.
Ich hätte gerne einen Verzeichnisnamen ohne Bindestriche.
Falls das nicht geht (weglassen der Bindestriche), würde es mir genügen, wenn das Jahr nur mit den letzten beiden Zahlen angezeigt wird.
Also "YY-MM-DD"

Das ändern der Reihenfolge von ...

echo set DOW=%%DD%%> ~tmpA.bat
echo set DD=%%MM%%>>~tmpA.bat
echo set MM=%%YYYY%%>>~tmpA.bat
echo set YYYY=%%1>>~tmpA.bat

hat leider nichts gebracht.
Mein Wissen reicht leider nicht aus, um die Anpassungen vorzunehmen.
Würde mich über Hilfe freuen.

P.S. Beim Vorschlag von elianda steige ich noch weniger durch, das ist jenseits meines Brain-Memories

Gruß Frank
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Beitrag von elianda »

Du benoetigst ein deutsches MS-DOS. Das sieht man, wenn man sich anschaut wie das Datum aus dem $D Format von Prompt in die Variablen geshiftet wird:
Bei einem deutschen MS-DOS wird $D z.B. durch 17.04.2008 ersetzt.
Bei einem englischen MS-DOS ist es 04-17-2008.

Bei der Tokenzerlegung von _D in dieser Zeile entsteht das Problem:
for %%v in (%_D%) do call ~tmpA.bat %%v
Hierfuer hat die englische Version schlichtweg die falschen Delimeter.
Ich bin mir nicht ganz sicher, aber vielleicht kann man mit country.sys die laenderspezifischen Trennzeichen auch dem for Befehl beibringen.

Deshalb hat danach auch %YYYY% noch das komplette Datum und nicht nur das Jahr (wie es richtig sein sollte).
Wenn du in %YYYY% noch Bindestriche siehst, macht es bei dir gerade nicht das, was es soll.

Wenn die Zerlegung geht kannst du das einfach herumdrehen indem Du am Ende schreibst:
md %YYYY%%MM%%DD%
Das gibt dann ein Verzeichnisnamen mit 8 Zeichen ohne Trennzeichen, also "20080417".

Einfach ist eben relativ. Obiges geht ohne externes Zusatzprogramm, dafuer muss dir for das Datum aus $D tokenisieren koennen.

Bei meiner Loesung koenntest du dir das beliebig hineditieren.
Diverse Retro-Computer vorhanden.
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Beitrag von DOSferatu »

Weil Pascal so praktisch ist, ab ich Dir (in 5 Minuten) ein Teil zusammengehackt, das genau das macht, was Du willst.

Heißt DATEDIR.EXE und kann in ne Batch eingebunden werden.

Gibt verschiedene Möglichkeiten:
DATEDIR
alleine legt das Verzeichnis in dem Verzeichnis an, in dem Du Dich grade befindest (das muß nicht das Verz. von DATEDIR sein, man kann das ja auch von woanders aufrufen, z.B. mit C:\TOOLS\DATEDIR.EXE oder so)

DATEDIR D:\BEISPIEL\BLA
legt das neue Verzeichnis als Unterverzeichnis in ein Verzeichnis (hier: Verzeichnis mit dem Namen C:\BEISPIEL\BLA an, also dann C:\BEISPIEL\BLA\080417)

DATEDIR * D:\BEISPIEL\BLA
macht dasselbe, nur daß es gleich in das angelegte Verzeichnis reinwechselt.

DATEDIR *
legt das Verzeichnis in Dein aktuelles Verzeichnis (wie oben) und wechselt dann in das Unterverzeichnis

Danach steht in ERRORLEVEL eine 0 oder 1. 0 bedeutet, daß alles in Ordnung ist, 1 bedeutet, daß ein Fehler aufgetreten ist, voraussichtlich, weil man das Verzeichnis nicht anlegen konnte (z.B. weil es schon existiert).
Wenn man aber den Stern (*) benutzt und das Verzeichnis existiert, wechselt er trotzdem in das Verzeichnis.

--------
Wenn Du es haben willst, gib mir Deine eMail-Adresse hier im Forum
(oder schreib mir persönlich an forum@igames.inside1.net) und ich schick Dir das als Mailanhang. Ist nur so 4 kByte groß.

Achso: Falls Du an Pascal interessiert bist, kann ich Dir auch den Quellcode dazu mitschicken.

Bis dann.
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Beitrag von frank9652 »

Das ist Supernett von dir, meine mailadresse habe ich dir per mail geschickt.
Am Quellcode von Pascal habe ich wegen Zeitmangel kein Interesse.

Gruß Frank
frank9652
Norton Commander
Beiträge: 142
Registriert: Di 27. Mär 2007, 13:03
Wohnort: Göppingen

Beitrag von frank9652 »

Sorry für meine Blödheit... :-?
Der Grund, weshalb bei mir das Datum im Format MM-DD-YYYY angezeigt wurde, war der, weil ich den Ländercode in der Config.sys nicht geladen hatte.
Nach dem Laden des Treibers wird das Datumsformat ganz normal DD.MM.YYYY angezeigt.

Config.sys
Country=049,850,c:\windows\COMMAND\Country.sys

Gruß Frank
Antworten