lyriker
Goto Top

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

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 dieseface-smile

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

Content-ID: 206452

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

Ausgedruckt am: 25.11.2024 um 07:11 Uhr

MrNetman
MrNetman 14.05.2013 um 17:21:50 Uhr
Goto Top
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
bastla
bastla 14.05.2013 aktualisiert um 17:46:21 Uhr
Goto Top
Hallo Lyriker!

Orientiere Dich an den Zeilen 22 bis 26, wobei für Zeile 22 in diesem Fall
if /i "%%i"=="Date " (
zu verwenden wäre ...

Grüße
bastla
Penny.Cilin
Penny.Cilin 14.05.2013 aktualisiert um 20:49:59 Uhr
Goto Top
Zitat von @MrNetman:
Datum kann man so lesen und schreiben:

Datum
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%

oder

set jahr=%date:~6,4%
set monat=%date:~3,2%
set tag=%date:~0,2%

@MrNetman
Deine variante kannte ich noch nicht.


Gruss Penny.
bastla
bastla 14.05.2013 um 22:11:14 Uhr
Goto Top
@ Penny.Cilin
Deine variante kannte ich noch nicht.
Das ist die Sicherheits-Variante, für den Fall, dass %date% auch den Wochentag (war zB Default bei W2000) mitliefert, also etwa
Di 14.05.2013
Grüße
bastla
Lyriker
Lyriker 15.05.2013 aktualisiert um 09:01:11 Uhr
Goto Top
Hallöchen.. jupp das mit dem Datum würde ja passen, wenn mir als Datumwerte immer das gleiche geliefert wird:

aber es komtm vor das ich

2013-1-1 also JJJJ-M-T

oder

2013-11-1 also JJJJ-MM-T

oder

2013-1-11 also JJJJ.M.TT

oder

2013-11-11 also JJJJ-MM-TT (was ich ja an sich bei allem haben will)

habe.. wenn ich die Zeichen zähle kommt bei jedem Fall etwas anderes raus?! ....

Danke bastla, habe die Frage wohl zu allgemein gestellt, Dein Ansatz stimmt natürlich ;)

Mir gings in dem Fall wirklich danach, die verschiedenen Fälle ab zu fangen.

@netman, ich teste das mal aus, aber was mache ich wenn ich 2013-1-11 (JJJJ.M.TT habe?.... oder 2013-11-1 JJJJ.MM.T)?
MrNetman
MrNetman 15.05.2013 aktualisiert um 09:48:45 Uhr
Goto Top
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
Endoro
Endoro 15.05.2013 aktualisiert um 10:27:23 Uhr
Goto Top
Hallo Lyriker,

Zitat von @Lyriker:
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!
Lyriker
Lyriker 16.05.2013 aktualisiert um 16:39:42 Uhr
Goto Top
Und noch immer bin ich am murksen...

irgendwie schaffe ich das nicht.

eine dritte Klausel (zu der if & else if) bekomme ich nicht rein, dann fängt das total an zu zicken...

hatte mir überlegt, den gesamten teil in drei token auf zu lösen und jeden der drei zu berechnen, um das dann wieder zusammen zu setzen und in die Datei zu schreiben.

hier mal ein Konstrukt , aber irgendwie bin ich grad mitz der for schleife zu blöd das in drei token aufzulösen und dann durch die if bedingung zu jagen (wenn kleiner 10 dann mache eine 0 davor) , aber irgdnwie regaiert die if klausel null darauf.

Könntets euch bittschee nochmal ansehen? ... (grad gestresst zwischen einer neuen SQL Abfrage und dem Kundensupport am Telefon sitze ... )

(bitte die Hilfsausgaben und pause übersehen ;))

@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"  
		if /i "!reihe1!"=="Date" (  
			echo !reihe2! sachmal
			for /f "tokens=1,2,3 delims=." %%u in ( "!reihe2!" ) do (  
				echo %%u
				echo %%v
				echo %%w
				set /a tag=%%w
				set /a monat=%%v
				set /a jahr=%%u
				set /a neun=9
				echo !tag!
				echo !monat!
				echo !jahr!
				rem echo %%x
				rem echo %%y
				rem echo %%z
				if "%monat%" LEQ "9" (  
					echo %%u
					echo %%v
					echo %%w
					rem echo %%x
					rem echo %%y
					rem echo %%z
					set "monat1=!monat!"  
					rem set "reihe2=!var:.=-!"  
					rem set "var=!reihe2!"  
						set "monat1=!monat1:1=01!"  
						set "monat1=!monat1:2=02!"  
						set "monat1=!monat1:3=03!"  
						set "monat1=!monat1:4=04!"  
						set "monat1=!monat1:5=05!"  
						set "monat1=!monat1:6=06!"  
						set "monat1=!monat1:7=07!"  
						set "monat1=!monat1:8=08!"  
						set "monat1=!monat1:9=09!"  
					echo !monat1!
					set "reihe2=%%u-!monat1!-!tag!"  
					echo ergebnis !reihe2!
					pause
				) 
				if "%tag%" LEQ "9" (  
					echo %%u
					echo %%v
					echo %%w
					rem echo %%x
					rem echo %%y
					rem echo %%z
					set "tag1=!tag!"  
					rem set "reihe2=!var:.=-!"  
					rem set "var=!reihe2!"  
						set "tag1=!tag1:1=01!"  
						set "tag1=!tag1:2=02!"  
						set "tag1=!tag1:3=03!"  
						set "tag1=!tag1:4=04!"  
						set "tag1=!tag1:5=05!"  
						set "tag1=!tag1:6=06!"  
						set "tag1=!tag1:7=07!"  
						set "tag1=!tag1:8=08!"  
						set "tag1=!tag1:9=09!"  
					
					echo !tag1!
					set "reihe2=%%u-!monat1!-!tag1!"  
					echo ergebnis !reihe2!
					pause
				) 
				
			 )
		
		 )
		
		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!"  
        )
      ) 
	echo|set /p ="~!reihe2!">>r2_%battemp%  
    REM 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%"  

Ergebnisbeispiel: Federhenn~2013-01-010~14:36:32.0000000~342~256~434~83~9~1267~1095~918

könnt aus der Haut fahren... ^^
Lyriker
Lyriker 17.05.2013 aktualisiert um 12:28:20 Uhr
Goto Top
Ok falls jemand Interesse hat, sowas mal selbst zu bauen, hier die funktionierende Lösung:

@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"  
		if /i "!reihe1!"=="Date" (  
			echo !reihe2! sachmal
			for /f "tokens=1,2,3 delims=." %%u in ( "!reihe2!" ) do (  
				rem echo %%u
				rem echo %%v
				rem echo %%w
				rem set /a S=%%w - 9
				rem echo Tag weniger 9 ist !S!
				set /a tagberechnen=%%w - 9
				set /a monatberechnen=%%v - 9
				set /a jahrberechnen=%%u - 9
				set /a tag=%%w
				set /a monat=%%v
				set /a jahr=%%u
				rem echo !tag!
				rem echo !monat!
				rem echo !jahr!
				rem set /a !tag!=!tag! - 9
				rem echo Tag !tag!
				rem echo Monat !monat!
				rem echo Jahr !jahr!
				rem echo %%x
				rem echo %%y
				rem echo %%z
				if !monatberechnen! LEQ 0 (
					rem echo monat zahl !monatberechnen!
					rem echo wenn %%u
					rem echo wenn %%v
					rem echo wenn %%w
					rem echo wenn %%x
					rem echo wenn %%y
					rem echo wenn %%z
					rem echo wenn !monat!
					set "monat1=!monat!"  
					rem set "reihe2=!var:.=-!"  
					rem set "var=!reihe2!"  
						set "monat1=!monat1:1=01!"  
						set "monat1=!monat1:2=02!"  
						set "monat1=!monat1:3=03!"  
						set "monat1=!monat1:4=04!"  
						set "monat1=!monat1:5=05!"  
						set "monat1=!monat1:6=06!"  
						set "monat1=!monat1:7=07!"  
						set "monat1=!monat1:8=08!"  
						set "monat1=!monat1:9=09!"  
					rem echo !monat1!
					set "reihe2=%%u-!monat1!-!tag!"  
					rem echo ergebnis !reihe2!
					rem pause
				) else (
				set monat1=!monat!
				rem echo ansonsten monat !monat1!
				rem pause
				  )
				if !tagberechnen! LEQ 0 (
				 rem echo tag zahl !tagberechnen!
					rem echo %%u
					rem echo %%v
					rem echo %%w
					rem echo %%x
					rem echo %%y
					rem echo %%z
					set "tag1=!tag!"  
					rem set "reihe2=!var:.=-!"  
					rem set "var=!reihe2!"  
					set "tag1=!tag1:1=01!"  
					set "tag1=!tag1:2=02!"  
					set "tag1=!tag1:3=03!"  
					set "tag1=!tag1:4=04!"  
					set "tag1=!tag1:5=05!"  
					set "tag1=!tag1:6=06!"  
					set "tag1=!tag1:7=07!"  
					set "tag1=!tag1:8=08!"  
					set "tag1=!tag1:9=09!"  
					rem echo 0 davor tag !tag1!
					set "reihe2=%%u-!monat1!-!tag1!"  
					rem echo ergebnis !reihe2!
					rem pause
				) else (
					set "reihe2=%%u-!monat1!-!tag!"  
					rem echo ansonsten monat !monat1!
					rem echo ansonsten monat !tag!
					rem echo ergebnis !reihe2!
					rem pause
				)
				
			 )
		
		 )
		
		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!"  
        )
      ) 
	echo|set /p ="~!reihe2!">>r2_%battemp%  
    REM 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%"  


Ergibt nach oberer Vorlage dann geschirbeen in die Textdatei:

Federhenn~2013-01-04~08:05:38.0000000~4~3~0~0~0~16~14~13