Supportnet / Forum / BS-Sonstige
Daum per Batchdatei einzeln in Variablen auslesen
Frage
Hallo,
@ all:
leider funzt das hier:
FOR /F "TOKENS=3,4,* DELIMS=." %%I IN (´ECHO %DATE%´) DO SET YYYY=%%I
FOR /F "TOKENS=2,2,* DELIMS=." %%I IN (´ECHO %DATE%´) DO SET MM=%%I
FOR /F "TOKENS=1,2,* DELIMS=." %%I IN (´ECHO %DATE%´) DO SET DD=%%I
ja leider nicht in REAL DOS MODE von MS DOS 7 :-(((
kann mir da jemand weiterhelfen?
ich bräuchte Variablen mit akutellem Datum, Jahr(4-stellig) eine, Monat eine, und Tag eine. Da das ganze teil eines progrämmchens auf boot-cd werden soll, würde ich nur ungern umleitungen in tmp-dateinen verwenden (zwingt ja dann zu xmsdsk), ebenso sind echos im prompt dann auch unschön...
ich weiß, dass sind fromme wünsche, aba vielleicht hat ja jemand den geistesblitz ;-)
würd mich echt freuen...
ps: alternativ auch gern irgendwelche progrämmchen a la *.com oder so die obiges können!
vielen dank.
grüßlies
bassix
Antwort 1 von manei
Hallo,
unter DOS ist die Ermittlung des reinen Datums und das Trennen etwas schwieriger als bei W2K/XP.
Habe eine frühere Batch mal kurz für Deine Zwecke umgearbeitet und bringt die gewünschten Ergebnisse. Einfach aufrufen mit z.B.
call datex2 a b c (Name kannst du frei wählen)
und Du hast Tag, Monat und Jahr. Läuft aber auch nur im DOS und Win9x.
[datex2.bat]
@echo off
cls
rem Aufruf in Batch oder Eingabeaufforderung mit:
rem z.B. call datex2 a b c
for %%e in (loop loop2) do if %2´==%%e´ goto %2
set q2=%1
set q3=%2
set q4=%3
set ~t=%TEMP%.\Tmp
echo @Prompt For %%%%%%%%D In ($D) Do Call %0 : loop %%%%%%%%D>%~t%1.bat
%COMSPEC% /C %~t%1.bat.>%~t%2.bat
call %~t%2.bat
call %~t%4 q1
Echo ; | Choice /S /C:;%q1%; %0 : loop2,>%~t%1.bat
%~t%1.bat
:loop
Echo @Prompt Set %%%%1=_%3_ > %~t%3.bat
%COMSPEC% /C %~t%3.bat > %~t%4.bat
For %%C In (Call Goto:end) Do %%C %~t%4
:loop2
for %%e in (x x1 x2) do set %%e=
If %4´==_´ Shift
for %%e in (set shift) do %%e x=%x%%4
for %%e in (set shift) do %%e x=%x%%4
shift
for %%e in (set shift) do %%e x1=%x1%%4
for %%e in (set shift) do %%e x1=%x1%%4
shift
for %%C in (shift set) do %%C x2=%4
for %%C in (shift set) do %%C x2=%x2%%4
for %%C in (shift set) Do %%C x2=%x2%%4
for %%C in (shift set) do %%C x2=%x2%%4
:end2
set %q2%=%x%
set %q3%=%x1%
set %q4%=%x2%
del %~t%*.bat>nul
for %%e in (q2 q3 q4 q1 x x1 x2 ~t) do set %%e=
:end
cls
MfG maneich
unter DOS ist die Ermittlung des reinen Datums und das Trennen etwas schwieriger als bei W2K/XP.
Habe eine frühere Batch mal kurz für Deine Zwecke umgearbeitet und bringt die gewünschten Ergebnisse. Einfach aufrufen mit z.B.
call datex2 a b c (Name kannst du frei wählen)
und Du hast Tag, Monat und Jahr. Läuft aber auch nur im DOS und Win9x.
[datex2.bat]
@echo off
cls
rem Aufruf in Batch oder Eingabeaufforderung mit:
rem z.B. call datex2 a b c
for %%e in (loop loop2) do if %2´==%%e´ goto %2
set q2=%1
set q3=%2
set q4=%3
set ~t=%TEMP%.\Tmp
echo @Prompt For %%%%%%%%D In ($D) Do Call %0 : loop %%%%%%%%D>%~t%1.bat
%COMSPEC% /C %~t%1.bat.>%~t%2.bat
call %~t%2.bat
call %~t%4 q1
Echo ; | Choice /S /C:;%q1%; %0 : loop2,>%~t%1.bat
%~t%1.bat
:loop
Echo @Prompt Set %%%%1=_%3_ > %~t%3.bat
%COMSPEC% /C %~t%3.bat > %~t%4.bat
For %%C In (Call Goto:end) Do %%C %~t%4
:loop2
for %%e in (x x1 x2) do set %%e=
If %4´==_´ Shift
for %%e in (set shift) do %%e x=%x%%4
for %%e in (set shift) do %%e x=%x%%4
shift
for %%e in (set shift) do %%e x1=%x1%%4
for %%e in (set shift) do %%e x1=%x1%%4
shift
for %%C in (shift set) do %%C x2=%4
for %%C in (shift set) do %%C x2=%x2%%4
for %%C in (shift set) Do %%C x2=%x2%%4
for %%C in (shift set) do %%C x2=%x2%%4
:end2
set %q2%=%x%
set %q3%=%x1%
set %q4%=%x2%
del %~t%*.bat>nul
for %%e in (q2 q3 q4 q1 x x1 x2 ~t) do set %%e=
:end
cls
MfG maneich
Antwort 2 von BASSIX
@ maneich
WOW! das muss ich gleich testen!
RIESEN dankeschön!
bassix
WOW! das muss ich gleich testen!
RIESEN dankeschön!
bassix
Antwort 3 von BASSIX
Hallo nochmal,
@ maneich
Vielen Dank nochmal. Hab gerstern noch bis früh morgens an dem code gesessen den du mir geschrieben hast.
Hab noch ein Problem, dass ich nicht geregelt krieg. Die produzierten Variablen haben ein Leerzeichen nach
dem Namen und call tmp2.bat produziert einen Syntaxfehler. Wenn du lust hast, hab hier den Fehler beschrieben:
call tmp2.bat sieht bevor der loop beginnt so aus:
For %%D In (Sa, 03-19-2005) Do Call datex2 : loop %%D#
Die # hab ich jez als Platzhalter für das Zeichen verwendet, das im Hex mit 25 25 definiert ist.
das ergebniss sieht bei [set] jetzt so aus:
...
A[Leerzeichen]=03
B[Leerzeichen]=19
C[Leerzeichen]=2005
CMDLINE=Choice /S /C:;_03-19-2005_
; datex2 : loop2,
...
Die Varible CDMLINE sieht wirklich so aus.
tmp4.bat sieht NACH loop so aus:
[Leerzeile]
Set %1=_03-19-2005_
[end code]
ist in Hex 35 5F
datex2 sieht jetzt so aus:
for %%e in (loop loop2) do if %2´==%%e´ goto %2
set q2=%1
set q3=%2
set q4=%3
set ~t=C:TMPDATETmp
echo @Prompt For %%%%%%%%D In ($D) Do Call %0 : loop %%%%%%%%D>%~t%1.bat
C:command.com /C %~t%1.bat>%~t%2.bat
PAUSE
call %~t%2.bat
PAUSE
call %~t%4.bat q1
Echo ; | Choice /S /C:;%q1%; %0 : loop2,>%~t%1.bat
%~t%1.bat
:loop
Echo @Prompt Set %%%%1=_%3_ > %~t%3.bat
C:command.com /C %~t%3.bat>%~t%4.bat
For %%C In (Call Goto:end) Do %%C %~t%4.bat
ECHO 2
:loop2
for %%e in (x x1 x2) do set %%e=
If %4´==_´ Shift
for %%e in (set shift) do %%e x=%x%%4
for %%e in (set shift) do %%e x=%x%%4
shift
for %%e in (set shift) do %%e x1=%x1%%4
for %%e in (set shift) do %%e x1=%x1%%4
shift
for %%C in (shift set) do %%C x2=%4
for %%C in (shift set) do %%C x2=%x2%%4
for %%C in (shift set) Do %%C x2=%x2%%4
for %%C in (shift set) do %%C x2=%x2%%4
:end2
set %q2%=%x%
set %q3%=%x1%
set %q4%=%x2%
%~t%*.bat>nul
for %%e in (q2 q3 q4 q1 x x1 x2 ~t) do set %%e=
:end
Bin sonntag wieder da, fahr jez zu Familie&Friends...
LG
bassix
@ maneich
Vielen Dank nochmal. Hab gerstern noch bis früh morgens an dem code gesessen den du mir geschrieben hast.
Hab noch ein Problem, dass ich nicht geregelt krieg. Die produzierten Variablen haben ein Leerzeichen nach
dem Namen und call tmp2.bat produziert einen Syntaxfehler. Wenn du lust hast, hab hier den Fehler beschrieben:
call tmp2.bat sieht bevor der loop beginnt so aus:
For %%D In (Sa, 03-19-2005) Do Call datex2 : loop %%D#
Die # hab ich jez als Platzhalter für das Zeichen verwendet, das im Hex mit 25 25 definiert ist.
das ergebniss sieht bei [set] jetzt so aus:
...
A[Leerzeichen]=03
B[Leerzeichen]=19
C[Leerzeichen]=2005
CMDLINE=Choice /S /C:;_03-19-2005_
; datex2 : loop2,
...
Die Varible CDMLINE sieht wirklich so aus.
tmp4.bat sieht NACH loop so aus:
[Leerzeile]
Set %1=_03-19-2005_
[end code]
ist in Hex 35 5F
datex2 sieht jetzt so aus:
for %%e in (loop loop2) do if %2´==%%e´ goto %2
set q2=%1
set q3=%2
set q4=%3
set ~t=C:TMPDATETmp
echo @Prompt For %%%%%%%%D In ($D) Do Call %0 : loop %%%%%%%%D>%~t%1.bat
C:command.com /C %~t%1.bat>%~t%2.bat
PAUSE
call %~t%2.bat
PAUSE
call %~t%4.bat q1
Echo ; | Choice /S /C:;%q1%; %0 : loop2,>%~t%1.bat
%~t%1.bat
:loop
Echo @Prompt Set %%%%1=_%3_ > %~t%3.bat
C:command.com /C %~t%3.bat>%~t%4.bat
For %%C In (Call Goto:end) Do %%C %~t%4.bat
ECHO 2
:loop2
for %%e in (x x1 x2) do set %%e=
If %4´==_´ Shift
for %%e in (set shift) do %%e x=%x%%4
for %%e in (set shift) do %%e x=%x%%4
shift
for %%e in (set shift) do %%e x1=%x1%%4
for %%e in (set shift) do %%e x1=%x1%%4
shift
for %%C in (shift set) do %%C x2=%4
for %%C in (shift set) do %%C x2=%x2%%4
for %%C in (shift set) Do %%C x2=%x2%%4
for %%C in (shift set) do %%C x2=%x2%%4
:end2
set %q2%=%x%
set %q3%=%x1%
set %q4%=%x2%
%~t%*.bat>nul
for %%e in (q2 q3 q4 q1 x x1 x2 ~t) do set %%e=
:end
Bin sonntag wieder da, fahr jez zu Familie&Friends...
LG
bassix
Antwort 4 von manei
Hallo,
das ergebniss sieht bei [set] jetzt so aus:
...
A[Leerzeichen]=03
B[Leerzeichen]=19
C[Leerzeichen]=2005
das könnte eigentlich nur davon kommen, wenn in den Zeilen
set q2=%1
set q3=%2
set q4=%3
nicht direkt hinter den Umgebungsvariablen das Zeienende definiert ist, also noch einLeerzeichen steht, nicht "set q2=%1", sondern "set q2=%1 ", testen.
Außerdem hast du das englische Datumsformat, aber damit solltest Du klarkommen.
Wenn Du damit nicht weiterkommst teste mal folgendes:
Hole Dir von http://home.mnet-online.de/horst.muc
das Programm LMOD (ist Freeware), mit
echo.|date|lmod /s. [$4] [$5] [$6]
bekommst Du das gleiche Ergebnis. Für Deine Zwecke sind dann aber drei Schritte notwendig:
echo.|date|lmod /s- set %%1=[$4]>%temp% mp.bat
echo.|date|lmod /s- set %%2=[$5]>>%temp% mp.bat
echo.|date|lmod /s- set %%3=[$6]>>%temp% mp.bat
und mit
call %temp% mp a b c
Damit hast du wieder Dein Ergebnis. Eine leicht verständliche schnelle Erläuterung ist dabei.
/s- =Deine Trennung im Datum.
Nicht vergessen , wenn nicht im gleichen Verzeichnis, den Pfad mit anzugeben.
Nun ja, der Real Modus unter unterschiedlichen Systemen kann auch unterschiedliche Interpreationen haben. Das von mir vorgestellte Progie ist sowohl unter WinME als auch unter dem realen DOS von WinME und Win98 einwandfrei gelaufen.
MfG maneich
das ergebniss sieht bei [set] jetzt so aus:
...
A[Leerzeichen]=03
B[Leerzeichen]=19
C[Leerzeichen]=2005
das könnte eigentlich nur davon kommen, wenn in den Zeilen
set q2=%1
set q3=%2
set q4=%3
nicht direkt hinter den Umgebungsvariablen das Zeienende definiert ist, also noch einLeerzeichen steht, nicht "set q2=%1", sondern "set q2=%1 ", testen.
Außerdem hast du das englische Datumsformat, aber damit solltest Du klarkommen.
Wenn Du damit nicht weiterkommst teste mal folgendes:
Hole Dir von http://home.mnet-online.de/horst.muc
das Programm LMOD (ist Freeware), mit
echo.|date|lmod /s. [$4] [$5] [$6]
bekommst Du das gleiche Ergebnis. Für Deine Zwecke sind dann aber drei Schritte notwendig:
echo.|date|lmod /s- set %%1=[$4]>%temp% mp.bat
echo.|date|lmod /s- set %%2=[$5]>>%temp% mp.bat
echo.|date|lmod /s- set %%3=[$6]>>%temp% mp.bat
und mit
call %temp% mp a b c
Damit hast du wieder Dein Ergebnis. Eine leicht verständliche schnelle Erläuterung ist dabei.
/s- =Deine Trennung im Datum.
Nicht vergessen , wenn nicht im gleichen Verzeichnis, den Pfad mit anzugeben.
Nun ja, der Real Modus unter unterschiedlichen Systemen kann auch unterschiedliche Interpreationen haben. Das von mir vorgestellte Progie ist sowohl unter WinME als auch unter dem realen DOS von WinME und Win98 einwandfrei gelaufen.
MfG maneich
Antwort 5 von manei
Hallo,
mal wieder vergessen hier den Backslash doppelt zu schreiben, muß natürlich heißen
echo.|date|lmod /s- set %%1=[$4]>%temp%\tmp.bat
echo.|date|lmod /s- set %%2=[$5]>>%temp%\tmp.bat
echo.|date|lmod /s- set %%3=[$6]>>%temp%\tmp.bat
und mit
call %temp%\tmp a b c
MfG maneich
mal wieder vergessen hier den Backslash doppelt zu schreiben, muß natürlich heißen
echo.|date|lmod /s- set %%1=[$4]>%temp%\tmp.bat
echo.|date|lmod /s- set %%2=[$5]>>%temp%\tmp.bat
echo.|date|lmod /s- set %%3=[$6]>>%temp%\tmp.bat
und mit
call %temp%\tmp a b c
MfG maneich

