bbuser
Goto Top

Wie kann ich via Batch eine Datumsspalte in eine CSV Datei einfügen?

Auf diversen Servern fallen täglich Logfiles an, welche in Excel in einer Pivot ausgewertet werden sollen.

Hallo Forum,

die o.g. Logfiles werden mittels eines Herstellereigenen Tools ausgewertet. Es wird eine CSV generiert. In diese CSV Datei möchte ich nun vorzugweise mittels einer BATCH Datei eine Datumsspalte einfügen. Wie macht man dies bzw ist. das überhaupt möglich?

Später werden dann die CSV Dateien zusammen kopiert (was auch schon klappt) und via Pivot ausgwertet.

Für Tipps wäre ich dankbar.

Gruss

Content-Key: 139688

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

Printed on: April 23, 2024 at 10:04 o'clock

Member: bastla
bastla Apr 01, 2010 at 10:46:16 (UTC)
Goto Top
Hallo BBUser!

Etwa so:
@echo off & setlocal
set "Log=D:\Dein Log.csv"  

set "LTemp=%temp%\LogTemp.txt"  
move "%Log%" "%LTemp%"  
for /f "delims=" %%i in (%LTemp%) do >>"%Log%" echo %date%;%%i  
Grüße
bastla
Member: BBUser
BBUser Apr 01, 2010 at 11:17:01 (UTC)
Goto Top
Hallo bastla,

Danke für deine Hilfe.

Der Code funktioniert soweit schon recht gut, folgende Fehler treten noch auf.

1. ) Die Datumsspalte hat noch keine Überschrift wie z.b. date
2. ) Der zweiten Spalte in der CSV werden Sonderzeichen hinzugefügt, was den Import in Excel schwierig macht. Aus Server wird Server

Bekommen wir das gelöst?

Grüße
Member: bastla
bastla Apr 01, 2010 at 11:33:35 (UTC)
Goto Top
Hallo BBUser!

Ungetestet:
@echo off & setlocal
set "Log=D:\Dein Log.csv"  

set "LTemp=%temp%\LogTemp.txt"  
type "%Log%">"%LTemp%"  
del "%Log%"  
set "HeaderDone="  
for /f "delims=" %%i in (%LTemp%) do (  
    if defined HeaderDone (
        echo %date%;%%i
    ) else (
        echo Datum;%%i
        set "HeaderDone=True"  
    ) 
)>>"%Log%"  
[Edit] Ausgabe nach "%Log%" in die richtige Zeile gesetzt [/Edit]

Grüße
bastla
Member: BBUser
BBUser Apr 01, 2010 at 11:54:13 (UTC)
Goto Top
Hallo Bastla,

die Datumsspalte gibt es nun in der ersten Zeile.
Leider bleibt der restliche Inhalt verschwunden. Habe schon versucht dies zu lösen, aber ich finde den Fehler nicht - die for Schleife erscheint mir logisch.

/edit Fehler gefunden. Das schreiben in die Logdatei fehlte.
set "Log=C:.....csv"  

set "LTemp=C:.....txt"  

type "%Log%">"%LTemp%"  
del "%Log%"  
set "HeaderDone="  
for /f "delims=" %%i in (%LTemp%) do (  
    if defined HeaderDone (
        echo %date%,%%i >>"%Log%"      
 ) else (
        echo Datum,%%i
        set "HeaderDone=True"  
    ) >>"%Log%"   
)

Bekommt man das Sonderzeichen in der zweiten Spalte der ersten Zeile noch weg? Schaut in Excel so aus: Server


Grüße
Member: bastla
bastla Apr 01, 2010 at 12:12:00 (UTC)
Goto Top
Hallo BBUser!

In meinem Ansatz oben war die Ausgabe in die Log-Datei eine Zeile zu hoch platziert (ist jetzt korrigiert).
Bekommt man das Sonderzeichen in der zweiten Spalte der ersten Zeile noch weg?
Wenn "man" wüsste, wo es herkommt (aus dem Batch nämlich eigentlich nicht), hätte "man" ev eine Chance ...

Grüße
bastla

P.S: In ""-Formatierung kannst Du zwar nicht fett schreiben, aber ansonsten ist sie für Batches besser geeignet.
Member: BBUser
BBUser Apr 01, 2010 at 13:06:01 (UTC)
Goto Top
Hallo Bastla,

danke. Hab das mal gemacht, mit dem Code. Schaut einfach besser aus ;)

Meine Batch schaut derzeit so aus.

for /f "tokens=1-5 delims=/.-:;, " %%a in ("%date%,%time%") do set folderdate=%%c%%b%%a  

set logsource="E:\...\%folderdate%"  
set targetdir="C:\...\exports"  
set exe="C:\...\...stats.exe"  

%exe% -p e -u all -l %logsource% -output all -ol %targetdir%


ren "C:\...\HistoricalStats*.csv" "dailyuserstats_%folderdate%.csv"  


set "Log=C:\...\dailyuserstats_%folderdate%.csv"  

set "LTemp=C:\...\exports\LogTemp.txt"  

type "%Log%">"%LTemp%"  
del "%Log%"  
set "HeaderDone="  
for /f "delims=" %%i in (%LTemp%) do (  
    if defined HeaderDone (
        echo %folderdate%,%%i >>"%Log%"   
    ) else (
        echo Datum,%%i
        set "HeaderDone=True"  
    ) >>"%Log%"   
)

move %Log% "C:\...\exports\dailystats\"  

del %LTemp%

Noch nicht sonderlich hübsch.. aber funktioniert erstmal.
Könnte hier irgendwo der Fehler mit dem Sonderzeichen liegen?


Bin dann noch auf ein weiteres Problem gestoßen.

Die erstellten CSV Dateien kopiere ich dann z.b. täglich in eine andere CSV. Dort schaut es soweit ganz gut aus, leider werden die ersten Zeilen der CSV Dateien mitgenommen, d.h. alle ~30 Zeilen taucht dann wieder Datum, Server,.... auf. Kann man sowas auf einfache Weise verhindern?

Der "Zusammen-Kopier-Job" schaut so aus (Stammt hier aus dem Forum):

set "folder=C:\...\dailystats"  
set "report=C:\...\dailystats\Current_user_report.csv"  
set "line=C:\...\line1.txt"  

copy "%line%" "%report%" >nul  
copy "%folder%\*.csv" "%report%.tmp" >nul  
findstr /v /b /c:"Text" "%report%.tmp">>"%report%"  
del "%report%.tmp"  

Grüße
Member: bastla
bastla Apr 01, 2010 at 14:18:58 (UTC)
Goto Top
Hallo BBUser!

Hinsichtlich der Sonderzeichen habe ich keine Idee (Unicode als Ursache habe ich schon mit dem - ansonsten unnötigen - "type" eliminiert) ...
Was das "Zusammenkopieren" anlangt, setzt der Batch voraus, dass die Überschriftenzeile als "line1.txt" gespeichert ist - dann sollte aber eigentlich auch
set "folder=C:\...\dailystats"   
set "report=C:\...\dailystats\Current_user_report.csv"   
set "line=C:\...\line1.txt"   

type "%line%" "%report%"  
type "%folder%\*.csv"|findstr /v /b /c:"%line%">>"%report%"  
genügen ...

Grüße
bastla