113992
06.11.2013, aktualisiert am 07.11.2013
4246
17
0
Win98 Batch - Datum ermitteln und die Variable splitten in tag,mon,jahr
Leider habe ich kein Win98, soll aber eine Prozedur schreiben, die in Variablen Tag, Monat, Jahr, Zeit (hh mm) enthält.
Die Var. %date% gibt es wie es scheint nicht.
Dies habe ich umschifft, indem ich dies in ein file geschrieben und dann ausgelesen habe.
in datum.txt steht die 1. Zeite des Kommandos date
Die Var ist gefüllt mit tt.mm.jjjj und dies muß aufgesplittet werden.
Hat jemand Win98 und kann dies testen oder so ändern, dass es geht? mit Datum hab ichs geschafft.
Mit Zeit geht es vermutlich analog. Dies habe ich aber noch nicht begonnen.
Wenn mir jemand hier helfen könnte, wär das schön.
Soweit bin ich mit schmöckern im Internet bereits gekommen:
hier die Ausgabe unter Win7
Das schließen der DOS-Box geht in Win98 offensichtlich ebenfalls nicht.
Die Var. %date% gibt es wie es scheint nicht.
Dies habe ich umschifft, indem ich dies in ein file geschrieben und dann ausgelesen habe.
in datum.txt steht die 1. Zeite des Kommandos date
Die Var ist gefüllt mit tt.mm.jjjj und dies muß aufgesplittet werden.
Hat jemand Win98 und kann dies testen oder so ändern, dass es geht? mit Datum hab ichs geschafft.
Mit Zeit geht es vermutlich analog. Dies habe ich aber noch nicht begonnen.
Wenn mir jemand hier helfen könnte, wär das schön.
Soweit bin ich mit schmöckern im Internet bereits gekommen:
echo off
echo. | date | find /i "aktuelles" > datum.txt
type datum.txt
type datum.txt | findstr /v "^#"
rem der 3. Wert nach Trennzeichen Blank in Variable d
rem Trennzeichen . wär schön, wird aber abgewiesen.
for /F "tokens=3,3 delims= " %%a in ('type datum.txt ^| findstr /v "^#"') do (
set d=%%a
)
@echo Variable d xxx%d%xxx
echo.
rem ab hier beisst es aus: ich weiß nicht, ob Substring-Kommandos unter Win98 laufen.
rem unter Win7 geht es so.
set tag=%d:~0,2%
set mon=%d:~3,2%
set jar=%d:~6,4%
@echo Tag Mon Jahr xxxx%tag%xxx%mon%xxx%jar%xxx
del datum.txt
:eof
pause
E:\>echo off
Aktuelles Datum: 06.11.2013
Aktuelles Datum: 06.11.2013
Variable d xxx06.11.2013xxx
Tag Mon Jahr xxxx06xxx11xxx2013xxx
Drücken Sie eine beliebige Taste . . .
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 221318
Url: https://administrator.de/contentid/221318
Ausgedruckt am: 21.11.2024 um 18:11 Uhr
17 Kommentare
Neuester Kommentar
Ohne Win98 zum Testen wird das nichts. Da solltest Du die paar Kröten investieren.
Ich habe zwar noch Win98 in eine Krustelkiste herumliegen, aber aktuell keinen Rechner, (oder VM), auf dem das gerade verfügbar ist. Vielen anderen wird es genauso gehen, daß sie deswegen nicht anfangen wieder Win98 zu installieren. Da wird das einfachste sein, daß Du (oder Deine Brötchengeber) Dir eine Version kaufst/kauft.
lks
Ich habe zwar noch Win98 in eine Krustelkiste herumliegen, aber aktuell keinen Rechner, (oder VM), auf dem das gerade verfügbar ist. Vielen anderen wird es genauso gehen, daß sie deswegen nicht anfangen wieder Win98 zu installieren. Da wird das einfachste sein, daß Du (oder Deine Brötchengeber) Dir eine Version kaufst/kauft.
lks
Hallo Tilimann,
Grüße aus dem Jenseits :
hab mal einiges probiert ... Fehlanzeige, Batch war damals doch noch sehr beschränkt ... hier mal ein Ausschnitt:
auch eine Eingabeumleitung an Date bringt die Shell zum Absturz =8-)
@pieh-ejdsch
Für
Wird also Zeit das Ihr die 98er Kiste in die ewigen Jagdgründe schickt !
Grüße Uwe
Alternative: verwende eine drittanbieter-exe die das Datum und die Zeit passend ausgibt.
Grüße aus dem Jenseits :
hab mal einiges probiert ... Fehlanzeige, Batch war damals doch noch sehr beschränkt ... hier mal ein Ausschnitt:
auch eine Eingabeumleitung an Date bringt die Shell zum Absturz =8-)
@pieh-ejdsch
Für
cmd
war damals noch command
das equivalent Das schließen der DOS-Box geht in Win98 offensichtlich ebenfalls nicht.
mit exit
gehts im Test, es muss in den Eigenschaften der DOS-Box das Häkchen "Beim Beenden schließen" gesetzt sein.Wird also Zeit das Ihr die 98er Kiste in die ewigen Jagdgründe schickt !
Grüße Uwe
Alternative: verwende eine drittanbieter-exe die das Datum und die Zeit passend ausgibt.
Zitat von @colinardo:
Alternative: verwende eine drittanbieter-exe die das Datum und die Zeit passend ausgibt.
Alternative: verwende eine drittanbieter-exe die das Datum und die Zeit passend ausgibt.
@to
Und vor allem: Installier Dir ein win98-Testsystem zum debuggen.
lks
moin,
Wenn denn soviele Probleme auftauchen müssen dies eben umschifft werden.
Die Sekunden werden daher unter den Tisch fallen.
Die Prozedur fürs setzen der Variablen sollte so zu lösen sein:
Gruß Phil
Wenn denn soviele Probleme auftauchen müssen dies eben umschifft werden.
Die Sekunden werden daher unter den Tisch fallen.
Die Prozedur fürs setzen der Variablen sollte so zu lösen sein:
@echo off
set File=Datetime.txt
del %file% 2>nul
echo.>%file%
set month=01 02 03 04 05 06 07 08 09 10 11 12
set hours=13 14 15 16 17 18 19 20 21 22 23
set days=24 25 26 27 28 29 30 31
set minutes=32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
for %%Y in (%hours%) do dir %file% |find "%file%" |find ".20%%Y" >nul && set "YY=%%Y"
rem erst den Mittelteil separieren, da dieser von Punkten Umschlossen ist
for %%M in (%month%) do dir %file% |find "%file%" |find ".%%M." >nul && set "MM=%%M"
rem Mit Hilfe der zwei Punkte des Mittelteils den ersten Teil extrahieren
for %%D in (%month% %hours% %days%) do dir %file% |find "%file%" |find "%%D.%MM%." && set "DD=%%D"
for %%h in (00 %month% %hours%) do dir %file% |find "%file%" |find " %%h:" >nul && set "HH=%%h"
for %%m in (00 %month% %hours% %days% %minutes%) do dir %file% |find "%file%" |find ":%%m" >nul && set "Min=%%m"
del %file%
echo(
echo Jahr: %YY%
echo Monat: %MM%
echo Tag: %DD%
echo Stunde: %HH%
echo Minute: %min%
Gruß Phil
moin Tiliman,
ich habe die Prozedur zur Erstellung der Variablen Tag, Monat, Jahr, Zeit (hh mm) nochmals überarbeitet.
Die Ausgabe des DIR war dann doch etwas anders als erwartet.
Ein verknüpfter Folgebefehl kann nicht angelegt werden, nur die Auswertung des Errorlevels ist möglich.
Choice.com wertet das Format des Datum sowie die erste Ziffer von Datum und Uhrzeit aus.
Die Größe der Variablenwerte in der Umgebung werden sehr beschränkt und daher die nicht nachher benötigten Variablen entsprechend zeitig genug gelöscht.
Zum Einsparen der Variablen sind die Dateinamen fest eingetragen.
Der Batch arbeitet zur Ermittlung der Variablen im %temp% Verzeichnis.
Nacher geht er wieder ins Gestartete Verzeichnis und löscht die Tempdateien.
Ob die Batch nun 20 Sekunden oder eine Minute benötigt ist doch auch egal. (hier war es nach einem Liedschlag fertig)
Eine gestartete Verknüpfung *.pif der Test.Batch mit der Einstellung in den Eigenschaften (Registerkarte Programm) mit der Befehlszeile
lässt ein Zeilenweises Debugging der Batch zu.
Getestet unter einem Virtuell angelegten Windows 98:
Gruß Phil
ich habe die Prozedur zur Erstellung der Variablen Tag, Monat, Jahr, Zeit (hh mm) nochmals überarbeitet.
Die Ausgabe des DIR war dann doch etwas anders als erwartet.
Ein verknüpfter Folgebefehl kann nicht angelegt werden, nur die Auswertung des Errorlevels ist möglich.
Choice.com wertet das Format des Datum sowie die erste Ziffer von Datum und Uhrzeit aus.
Die Größe der Variablenwerte in der Umgebung werden sehr beschränkt und daher die nicht nachher benötigten Variablen entsprechend zeitig genug gelöscht.
Zum Einsparen der Variablen sind die Dateinamen fest eingetragen.
Der Batch arbeitet zur Ermittlung der Variablen im %temp% Verzeichnis.
Nacher geht er wieder ins Gestartete Verzeichnis und löscht die Tempdateien.
Ob die Batch nun 20 Sekunden oder eine Minute benötigt ist doch auch egal. (hier war es nach einem Liedschlag fertig)
Eine gestartete Verknüpfung *.pif der Test.Batch mit der Einstellung in den Eigenschaften (Registerkarte Programm) mit der Befehlszeile
C:\WINDOWS\COMMAND.COM /y /k C:\TEST.BAT
Getestet unter einem Virtuell angelegten Windows 98:
@echo off
ver|find "Windows 98" >nul
if errorlevel 1 goto :Error98
if Datum.==%1. goto :Datum
if Zeit.==%1. goto :Zeit
if Form.==%1. goto :Form
if BAT.==%1. goto :Beginn
if /?.==%1. goto :Hilfe
prompt $g
echo.|Date|find "A"
echo.|Time|find "A"
:: ++ File "%temp%\TempEin.txt"
echo.>"%temp%\TempEin.txt"
echo.exit>>"%temp%\TempEin.txt"
<"%temp%\TempEin.txt" command /k prompt cd $P |find ":" |find /v "exit" >"%temp%\TempBak.bat"
<"%temp%\TempEin.txt" command /k prompt $N |find ":" |find /v "exit" >>"%temp%\TempBak.bat"
if exist "%temp%\TempBat.bat" del "%temp%\TempBat.bat"
:: ++ File "%temp%\TempBat.bat"
copy %0 "%temp%\TempBat.bat" >nul
cd "%temp%"
C:
call TempBat BAT
call TempBak
:: -- Files Neues.bat Temp???.*
del "%temp%\Neues.bat"
del "%temp%\Temp???.*"
echo ----- Variablen -----
echo JJ=%JJ%
echo MM=%MM%
echo TT=%TT%
echo HH=%HH%
echo m=%M%
echo ss=%SS%
if not .%ms%==. echo ms=%ms%
if not .%wday%==. echo Wday=%Wday%
echo.
echo Zeitstempel: %JJ%%MM%%TT%-%HH%%M%%SS%
rem Hier kommt Dein Programm zum sichern hin
rem oder das Sicherungsprogramm wird hier ausgeführt.
pause
exit
:Error98
echo Programm nur speziell fuer Windows 98 Optimiert.
goto :Ende
:Erfolg
:Beginn
for %%i in (Wday JJ MM TT HH M SS ms Dateform) do set %%i=
:: ++ File TempAus.bat Neuses.bat
type nul>TempAus.bat
type nul>Neues.bat
echo.|Date|>TempEin.txt find "("
echo exit >>TempEin.txt
<TempEin.txt command /k prompt call TempBat Form |find ":" >>TempAus.bat
echo.>>TempAus.bat
echo exit |command /k prompt call TempBat Datum $D |find "call" >>TempAus.bat
echo.>>TempAus.bat
echo exit |command /k prompt call TempBat Zeit $T |find "call" >>TempAus.bat
echo.>>TempAus.bat
TempAus
goto :eof
:Form
echo J|choice /s /n /c:%4 >nul
for %%i in (1 4 7) do if errorlevel %%i set D=%%i
:: +++ Var D D1 D4 D7
set D%D%=JJ
echo M|choice /s /n /c:%4 >nul
for %%i in (1 4 7) do if errorlevel %%i set D=%%i
set D%D%=MM
echo T|choice /s /n /c:%4 >nul
for %%i in (1 4 7) do if errorlevel %%i set D=%%i
set D%D%=TT
:: +++ Var D2 D3
set D2=%D4%
set D3=%D7%
:: --- Vars D4 D7 D
for %%i in (D4 D7 D) do set %%i=
set Dateform=%D1% %D2% %D3%
goto :Ende
:Datum
:: +++ Var Datum
set %1=%3
if .==.%4 set %1=%2
:: +++ Var Wday
if not .==.%4 set Wday=%2
:: +++ Var T
echo %Datum% |choice /n /c:.,-\ >nul
if errorlevel 1 set T=.
if errorlevel 2 set T=,
if errorlevel 3 set T=-
if errorlevel 4 set T=\
:: ++ File TempChk.bat TempEin.txt
echo.>TempEin.txt
echo.exit>>TempEin.txt
<TempEin.txt command /k prompt find "%%2 %%4%%2" $LTempIst.bat $G$GTempFlt.bat |find "find" |find /v "exit" >TempChk.bat
:: -- File TempEin.txt
del TempEin.txt
:Teil1A
:: +++ Var DF %D1%
set DF=%D1%
echo %Datum% |choice /n /c:1234567890 >nul
for %%i in (1 2 3 4 5 6 7 8 9 10) do if errorlevel %%i set %D1%=%%i
:: ++ File TempStx.bat
>TempStx.bat echo if %%%D1%%%==10 set %D1%=0
call TempStx
:Teil1B
:: ++ TempIst.bat TempFlt.bat
type nul>TempIst.bat
type nul>TempFlt.bat
>TempStx.bat echo set String=%%%DF%%%
:: +++ Var String
call TempStx
>>TempIst.bat for %%b in (0 1 2 3 4 5 6 7 8 9) do echo call TempCHK %D1% %String%%%b %Datum%
call TempIst
:: ++ File TempChk
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
>TempStx.bat echo set FString=%%%D1%%%
:: --- Var Astring
set Astring=
:: +++ Var FString
call TempStx
:: +++ Var Next
set Next=Teil2A
echo :%Datum% |find ":%FString%%T%" >nul
if errorlevel 1 goto :plus2
:Teil2A
set DF=%D2%
del TempIst.bat
>>TempIst.bat for %%a in (0 1 2 3) do echo call TempCHK %D2% %%a %Datum% %%%D1%%%%T%
ren TempChk TempChk.bat
call TempIst
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
>TempStx.bat echo set String=%%%DF%%%
:: +++ Var %D2%
call TempStx
del TempIst.bat
>>TempIst.bat for %%b in (0 1 2 3 4 5 6 7 8 9) do echo call TempCHK %D2% %String%%%b %Datum% %%%D1%%%%T%
ren TempChk TempChk.bat
call TempIst
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
>TempStx.bat echo set FString=%%%D1%%%%T%%%%D2%%%
>>TempStx.bat echo set Astring=%%%D1%%%%T%
call TempStx
echo :%Datum% |find ":%FString%%T%" >nul
set Next=Teil3A
if errorlevel 1 goto :plus2
:Teil3A
set DF=%D3%
del TempIst.bat
>>TempIst.bat for %%a in (0 1 2 3) do echo call TempCHK %D3% %%a %Datum% %%%D1%%%%T%%%%D2%%%%T%
ren TempChk TempChk.bat
call TempIst
ren TempChk.bat TempChk
:: +++ Var %D3%
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
>TempStx.bat echo set String=%%%DF%%%
call TempStx
del TempIst.bat
>>TempIst.bat for %%b in (0 1 2 3 4 5 6 7 8 9) do echo call TempCHK %D3% %String%%%b %Datum% %%%D1%%%%T%%%%D2%%%%T%
ren TempChk TempChk.bat
call TempIst
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
>TempStx.bat echo set FString=%%%D1%%%%T%%%%D2%%%%T%%%%D3%%%
>>TempStx.bat echo set Astring=%%%D1%%%%T%%%%D2%%%%T%
call TempStx
set Next=Teilx
echo :%Datum%: |find ":%FString%:" >nul
if errorlevel 1 goto :plus2
:Teilx
:: --- Vars D1 D2 D3 String AString FString SubN SubMax T DF Next
for %%i in (D1 D2 D3 String AString FString SubN SubMax T DF Next) do set %%i=
del TempChk
goto :Ende
:Plus2
:: +++ Vars SubN SubMax
set SubN=0
set SubMax=2
:Nummer
>TempStx.bat echo set String=%%%DF%%%
call TempStx
del TempIst.bat
>>TempIst.bat for %%x in (0 1 2 3 4 5 6 7 8 9) do echo call TempCHK %DF% %String%%%x %Datum% %AString%
ren TempChk TempChk.bat
call TempIst
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
:: .... Zählschleife Durchgang
echo %SubN%|choice /n /c:0123456789 >nul
for %%i in (1 2 3 4 5 6 7 8 9 10) do if errorlevel %%i set SubN=%%i
if %subn%==%SubMax% for %%i in (%Next%) do goto :%%i
goto :Nummer
:Zeit
@echo off
:: +++ Vars Zeit ms HH
set %1=%2
set ms=%3
type nul>TempFlt.bat
type nul>TempIst.bat
echo %Zeit% |choice /n /c:120 >nul
for %%i in (1 2 3) do if errorlevel %%i set HH=%%i
if %HH%==3 set HH=0
:: ++ File TempEin.txt
echo.>TempEin.txt
echo.exit>>TempEin.txt
<TempEin.txt command /k prompt find "%%2 %%4%%2" $LTempIst.bat $G$GTempFlt.bat |find "find" |find /v "exit" >TempChk.bat
:: -- File TempEin.txt
del TempEin.txt
>TempIst.bat type nul
>>TempIst.bat for %%h in (0 1 2 3 4 5 6 7 8 9) do echo call TempCHK HH %HH%%%h %Zeit%
call TempIst
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
del TempIst.bat
>>TempIst.bat for %%M in (0 1 2 3 4 5) do echo call TempCHK M %%M %Zeit% %HH%:
ren TempChk TempChk.bat
call TempIst
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
:: +++ Var M
call TempFlt
del TempFlt.bat
del TempChk.bat
del TempIst.bat
>>TempIst.bat for %%m in (0 1 2 3 4 5 6 7 8 9) do echo call TempCHK M %M%%%m %Zeit% %HH%:
ren TempChk TempChk.bat
call TempIst
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
del TempIst.bat
>>TempIst.bat for %%S in (0 1 2 3 4 5) do echo call TempCHK SS %%S %Zeit% %HH%:%M%:
ren TempChk TempChk.bat
call TempIst
ren TempChk.bat TempChk
>TempChk.bat echo set %%1=%%2
:: +++ Var SS
call TempFlt
del TempFlt.bat
del TempChk.bat
del TempIst.bat
>>TempIst.bat for %%s in (0 1 2 3 4 5 6 7 8 9) do echo call TempCHK SS %SS%%%s %Zeit% %HH%:%M%:
ren TempChk TempCHK.bat
call TempIst
>TempChk.bat echo set %%1=%%2
call TempFlt
del TempFlt.bat
del TempChk.bat
del TempIst.bat
goto :Ende
:Hilfe
echo Sowas - noch keine Hilfe Vorhanden.
:Ende
:eof
Gruß Phil
Zitat von @113992:
Die Wartezeit war abgelaufen. Ich habs über Tel. versucht, und es hat nicht geklappt. Den WLAN-USB-Treiben konnte ich dann
ebenfalls nicht mehr installieren.
Entweder war Windows tatsächlich geklaut oder schon auf einer anderen Hardware aktiviert und geht auch dann nicht, wenn die
alte Hardware vernichtet ist.
Die Wartezeit war abgelaufen. Ich habs über Tel. versucht, und es hat nicht geklappt. Den WLAN-USB-Treiben konnte ich dann
ebenfalls nicht mehr installieren.
Entweder war Windows tatsächlich geklaut oder schon auf einer anderen Hardware aktiviert und geht auch dann nicht, wenn die
alte Hardware vernichtet ist.
Vermutlich hat er eine OEM-version draufgebügelt bekommen, die nur auf der ursprüglichen Hardware ohen Aktivierung läuft. Bei anderen Geräten muß man dann eien gültige Lizenz eintippen und aktivieren. Das Dumme ist nur, die Lizenz muß genau zu der Product-IdD passen, die auf der Platte ist. Also gültige Linzenznumemr eintippen udn aktiveren udn gut ist.
lks
PS: Auf den Lizenzaufklebern steht normalerweise zu welchem Medium diese Nummer gehört, z.B. X11-47374 bei einem DELL-OEM-XP-Home.