Wie bekomme ich ein Datum im Format JJJJ-M-T zu JJJJ-MM-TT innerhlab eines Batch Konstruktes
Nach meiner Exkursion in die Batcherei:
Maschinenlogs in Batch aufbereiten
Habe ich folgendes Script zusammen gebustelt:
(Ich starte durch eine Run.bat und übergebe die Textdatei an diese
als Endprodukt kommt dann:
heraus, was schon ein guter Anfang ist, wenn nicht dieses Problem wäre:
~2013-1-7 kann nicht in die Datenbank eingelesen werden (zumindest nicht von bcp) das müsste 2013-01-07 sein. (also JJJJ-M-T zu JJJJ-MM-TT)
Da es aber auch ein Datum gibt das 2013-11-1 gegen könnte oder sogar 2013-11-11 Bin ich etwas ratlos, wie ich es hin bekomme das ganze um zu pfriemeln.
Für Hilfe wäre ich dankbar, vielleicht komme ich ja auch noch selbst im laufe des Abends drauf.
Danke schon im voraus.
Maschinenlogs in Batch aufbereiten
Date :2013.1.4
Save Recording : 8.5.38 Clock
Automatik : T#4m18s
Aktiv : T#3m27s
Error : T#18s
Magazine : T#51s
Out trans. : T#0ms
Schnitte: 16
Teil abgeschoben: 14
Number of Parts: 13
Habe ich folgendes Script zusammen gebustelt:
(Ich starte durch eine Run.bat und übergebe die Textdatei an diese
@echo off
setlocal EnableDelayedExpansion
set "outfile=log.tmp"
echo %battemp%
if exist ".\abgearbeitet\*%battemp%" goto :ende
REM set "loeschen=%time:~0,2%h%time:~3,2%m%time:~6,2%s_%date%_%battemp%"
set "loeschen=%date%_%battemp%"
del r1_%battemp%
del r2_%battemp%
echo.|set /p ="Federhenn">>r2_%battemp%
for /f "usebackq tokens=1* delims=:" %%i in ("%battemp%") do (
set "reihe1=%%i"
set "reihe1=!reihe1: =!"
for /f "tokens=1,2" %%k in ("%%j") do (
set "reihe2=%%k"
set "var=!reihe2!"
set "reihe2=!var:.=-!"
echo !reihe2!
if /i "%%l"=="Clock" (
for /f "tokens=1-3 delims=." %%I in ("%%k") do (
set /a "h=10%%I, m=10%%J, s=10%%K"
set "reihe2=!h:~-2!:!m:~-2!:!s:~-2!.0000000"
)
) else if /i "!reihe2:~,2!"=="T#" (
for /f "tokens=1,2 delims=T#ms" %%I in ("%%k") do (
if "%%J"=="" (
set /a "m=100, s=10%%I"
) else (
set /a "m=10%%I, s=10%%J"
)
set "reihe2=!m:~2!"
)
)
REM echo|set /p ="~!reihe2!">>r2_%battemp%
echo|set /p ="~!reihe2!"
)
)
FOR /F "delims=|" %%f IN (r2_%battemp%) DO echo %%f>>export/export.csv
:ende
ren "%battemp%" "%loeschen%"
if exist ".\abgearbeitet\%date%_%battemp%" goto :endezwei
xcopy /i /y /c %loeschen% abgearbeitet
:endezwei
del r1_%battemp%
del r2_%battemp%
ren "%loeschen%" "%battemp%"
als Endprodukt kommt dann:
Federhenn~2013-1-7~14:28:51.0000000~83~30~11~40~11~161~141~95
heraus, was schon ein guter Anfang ist, wenn nicht dieses Problem wäre:
~2013-1-7 kann nicht in die Datenbank eingelesen werden (zumindest nicht von bcp) das müsste 2013-01-07 sein. (also JJJJ-M-T zu JJJJ-MM-TT)
Da es aber auch ein Datum gibt das 2013-11-1 gegen könnte oder sogar 2013-11-11 Bin ich etwas ratlos, wie ich es hin bekomme das ganze um zu pfriemeln.
Für Hilfe wäre ich dankbar, vielleicht komme ich ja auch noch selbst im laufe des Abends drauf.
Danke schon im voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 206452
Url: https://administrator.de/contentid/206452
Ausgedruckt am: 25.11.2024 um 07:11 Uhr
9 Kommentare
Neuester Kommentar
Datum kann man so lesen und schreiben:
Datum
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
echo %jahr%%monat%%tag%
erzeugt aus der Eingabe 21.09.2005 dann z.B.:20050921
Wenn es eine andere Variable ist, dann genügt das Zählen der Einträge: hier für den Monat die Stelle 7, 2 Zeichen lang.
hoffe, das hilft.
Anonsten sind hier im Forum ganz viele Beispiele mit dem Datum über die Suchfunktion erreichbar.
GRuß
Netman
Datum
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
echo %jahr%%monat%%tag%
erzeugt aus der Eingabe 21.09.2005 dann z.B.:20050921
Wenn es eine andere Variable ist, dann genügt das Zählen der Einträge: hier für den Monat die Stelle 7, 2 Zeichen lang.
hoffe, das hilft.
Anonsten sind hier im Forum ganz viele Beispiele mit dem Datum über die Suchfunktion erreichbar.
GRuß
Netman
Wenn es eine gewisse Konsistenz gibt, wie im Beispiel vorher in etwa erkennbar, dann kannst du mit der Suchfunktion arbeiten.
Jahr bis zum ersten Strich
Monat nach dem ersten bis zum zweiten Strich ....
Oder zählen, das gezählte (Jahr) "löschen" und als nächsten Schritt den Monat dran nehmen und diesen Wert verändern. Das steht in jedem Fall kein Tag drin. Den Tag von rechts zählen klappt auch (das "-" Zeichen davor)
Für leichtere Verarbeitungszwecke würde ich die Ergebnisse von Monat und Tag aber auf jeden Fall zweistellig machen.
lg
Netman
Jahr bis zum ersten Strich
Monat nach dem ersten bis zum zweiten Strich ....
Oder zählen, das gezählte (Jahr) "löschen" und als nächsten Schritt den Monat dran nehmen und diesen Wert verändern. Das steht in jedem Fall kein Tag drin. Den Tag von rechts zählen klappt auch (das "-" Zeichen davor)
Für leichtere Verarbeitungszwecke würde ich die Ergebnisse von Monat und Tag aber auf jeden Fall zweistellig machen.
lg
Netman
Hallo Lyriker,
Bei den zweiziffrigen könntest du schauen, ob eins über 12 geht.
Ansonsten würfeln.
Gruss!
Zitat von @Lyriker:
aber was mache ich wenn ich 2013-1-11 (JJJJ.M.TT habe?.... oder 2013-11-1 JJJJ.MM.T)?
aber was mache ich wenn ich 2013-1-11 (JJJJ.M.TT habe?.... oder 2013-11-1 JJJJ.MM.T)?
Bei den zweiziffrigen könntest du schauen, ob eins über 12 geht.
Ansonsten würfeln.
Gruss!