astrarotlichluva
Goto Top

Log Datei teilen und zeile als Dateiname auslesen

Log Datei (größe, Zeilen länge unbekannt) auslesen

also ich habe mehre recht grosse log datein
will die einzelt bearbeiten weil sehr stark verteilt auf server.
egal
also die log datei ist gross
zeilen zahl unbekannt
aber nicht größer als 30mb

aufbau:
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
-Block ......sadjkasdasd id:0001
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
bla bla blablab labablabab
-Block ......sadjkasdasd id:0002


ich will nun alles von
Anfang an der Datei
bis Ender der Zeile -Block
das log teilen
und dieses in eine neue Datei schrieben die 0001.txt heisst
also in der Zeile wo "-Block" vor kommt mit tokens bis nach dem "id:" gehen und als var. ausgeben
und diesen den als ren.

a la:

for /f "tokens=2 delims==" %%a in ('findstr "-1Block" %logfile%') do set slpittfileNr=%%a


aber wie tiele ich da die große log datei vorher und benenne den die teile so?
hoffe jemand kann mir schnell helfen


dank schon mal in vorraus fürs druchlesen
allein.


rechtschrieb und coding fehler sind mein eigentum
damit darf nur ich spielen

Content-Key: 88266

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

Printed on: April 20, 2024 at 02:04 o'clock

Member: bastla
bastla May 22, 2008 at 18:13:04 (UTC)
Goto Top
Hallo astrarotlichluva und willkommen im Forum!

Das könnte etwa so gehen:
@echo off & setlocal
set "LogDir=D:\Logs"  
set "Log=Logdatei.txt"  
set "Crit=^-1Block"  

set "T=%LogDir%\Temp.txt"  
if exist "%T%" del "%T%"  
pushd "%LogDir%"  
for /f "usebackq delims=" %%i in ("%LogDir%\%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%T%") else call :MoveFile "%%i"  
popd
goto :eof

:MoveFile
for /f "tokens=8* delims=:" %%a in (%1) do set "LogName=%%b"  

:Trim
if "%LogName:~,1%"==" " set "LogName=%LogName:~1%" & goto :Trim  

if not exist "%LogName%.txt" move %T% "%LogName%.txt" & goto :eof  
set "Tm=0%time%"  
set "Tm=%Tm:,=%"  
set "Tm=%Tm:.=%"  
set "Tm=%Tm: =%"  
set "Tm=%Tm:~-10%  
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%"  
set "LogName=%LogName::=%  
move %T% "%LogName%.txt"  
goto :eof

Grüße
bastla

P.S.: Falls es Dir nicht aufgefallen sein sollte: Ich habe "gehen" geschrieben, nicht "laufen" ... face-wink

[Edit] Versuch einer Performanceverbesserung durch Schreiben bereits in der "for"-Schleife und nicht erst im Unterprogramm; "Ersatz"-Namensgebung bei bereits vorhandener Zieldatei geändert [/Edit]

[Edit2] Ein "%~1" in das richtige "%%i" geändert und auf Basis der unten geposteten Logdateistruktur angepasst [/Edit2]

[Edit3] Als Sicherheitsvariante für die "Ersatz"-Benennung bereits vorhandener Zieldateien auch Hundertstelsekunden einbezogen [/Edit3]
Member: astrarotlichluva
astrarotlichluva May 22, 2008 at 18:23:08 (UTC)
Goto Top
jo ich schau mal aber vilene danke schonmal
kann ich leider erst morgen testen.
sage den ebscheit ob es "lauft" oder rennt
Member: bastla
bastla May 22, 2008 at 18:57:24 (UTC)
Goto Top
Hallo astrarotlichluva!

Wenn es keine grundsätzlichen Einwände gegen VBScript gibt, hätte ich hier noch eine Alternative zum Batch:
'SplitLogFile.vbs  
Const LogDir = "D:\Logs"  
Const LogFile = "Logdatei.txt"  
Const Crit = "-Block"  

Set fso = CreateObject("Scripting.FileSystemObject")  
LogText = Split(fso.OpenTextFile(LogDir & "\" & LogFile).ReadAll, vbCrLF)  

CritLen = Len(Crit)
LogPart = ""  

For Each Line In LogText
    If Left(Line, CritLen) <> Crit Then
        LogPart = LogPart & Line & vbCrLF
    Else
        LogPartName = Mid(Line, InStrRev(Line, ":") + 1)  
        If fso.FileExists(LogDir & "\" & LogPartName & ".txt") Then  
            D = Date
            LogPartName = LogPartName & "_" _  
                & Mid(D, 7) & Mid(D, 4, 2) & Left(D, 2) _
                & Replace(Time, ":", "")  
            fso.CreateTextFile(LogDir & "\" & LogPartName & ".txt").Write LogPart  
            LogPart = ""  
        End If
    End If
Next

Grüße
bastla
Member: astrarotlichluva
astrarotlichluva May 24, 2008 at 13:02:34 (UTC)
Goto Top
ne vb geht leider nicht
sry das ich das so spät gesagt habe.

naja es gibt ja ne "snipp Splitbla.bat"
kann man irgenwie die zeilen nummern über geben und so die log datei splitten
renamen kann man die datei ja später

mfg astra

::-----snipp Splitbla.bat Vers. 0.3----   
@echo off    
IF (%1)==() (echo Syntax %0 inputfile) & goto :eof    
IF not exist "%1" echo (Datei %1 nicht gefunden) & goto :eof      

SET "blafile=%1"  
REM (set /a cntLn=0 )             && REM Zeilenzähler    
REM (set /a MaxLnsPerFile=500)    && REM Max. Zeilen je Splitdatei, eigentlich Konstante    
REM (set /a FileCnt=1 )           && REM Zähler für die Splitdateien    

Set "Dirty=TRUE"              && REM DirtyFlag.. muss ich noch eine Datei "endgültig" schreiben?      

IF exist %temp%\tmpbla*.tmp del /q %temp%\tmpbla-*.tmp >nul    
FOR /F "Tokens=1* delims=" %%a IN ('type %blafile%') do call :WriteTmp %1 "%%a"      
IF "%Dirty%"=="TRUE" call :WriteFinal %~n1-%FileCnt%%~x1   
echo Datei %1 zerlegt in Dateien %~n1-1%~x1 bis %~n1-%FileCnt%%~x1.   

goto :eof 

---------hier Ende der Welt    

:WriteTmp    


Set /a cntln=%cntln%+1    
IF %cntln% GEQ 1 (    
   echo %~2>>%temp%\tmpbla-%FileCnt%.tmp    
   SET "Dirty=TRUE"      
   If %cntln% EQU %MaxLnsPerFile% call :WriteFinal %~n1-%FileCnt%%~x1  
) 

goto :eof    

------- ende WriteTmp-Block...zurück zur FOR.. IN.. DO..Schleife    

:WriteFinal    
Copy /b "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul      
REM Copy /b "%temp%\Headline.Txt"+ "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul     
SET "Dirty=FALSE" & (set /a cntln=1) & (set /a FileCnt=%FileCnt%+1)      
goto :eof   
::-----snapp Splitbla.bat Vers. 0.3---- 


die log datei aufbau noch ma:
.....
 1.500020e+002	 2.144980e+002	 6.963079e+002	nm	 2.281911e+002	nm	 6.538393e-001	nm	 5.020137e+002	nm	 1.047534e+002	nm											
 1.500020e+002	 2.144980e+002	 7.074566e+002	nm	 2.353388e+002	nm	 1.580196e+000	nm	 5.003358e+002	nm	 9.508016e+001	nm														
 1.500020e+002	 2.144980e+002	 7.031426e+002	nm	 2.331226e+002	nm	 3.034034e+000	nm	 4.999146e+002	nm	 9.026766e+001	nm														
 1.450000e+002	 2.144980e+002	 6.959890e+002	nm	 2.293731e+002	nm	 2.118024e+000	nm	 4.951898e+002	nm	 9.575802e+001	nm														
 1.450000e+002	 2.144980e+002	 6.929615e+002	nm	 2.319669e+002	nm	-2.133383e+000	nm	 5.056529e+002	nm	 9.211335e+001	nm														
 1.450000e+002	 2.144980e+002	 7.021602e+002	nm	 2.271893e+002	nm	-1.397261e+000	nm	 5.033282e+002	nm	 9.374658e+001	nm														
 1.450000e+002	 2.144980e+002	 6.695101e+002	nm	 2.256670e+002	nm	-1.910170e+000	nm	 5.140209e+002	nm	 1.044900e+002	nm														
 1.450000e+002	 2.144980e+002	 6.654938e+002	nm	 2.267565e+002	nm	-2.567262e-002	nm	 5.140038e+002	nm	 1.111206e+002	nm														
-1Block: 221	date: 15.05.08 21:27:08	Messaufgabe: Testlauf Probennummer: 844 Schichtfolge:  Prüfer: XX
 2.450000e+002	 2.394980e+002	 6.213414e+002	nm	 2.202457e+002	nm	-5.858052e-001	nm	 4.958063e+002	nm	 1.069977e+002	nm														
 2.450000e+002	 2.394980e+002	 6.355864e+002	nm	 2.233881e+002	nm	-6.122822e-001	nm	 4.863254e+002	nm	 1.006662e+002	nm														
 2.450000e+002	 2.394980e+002	 6.279558e+002	nm	 2.217353e+002	nm	 1.205401e+000	nm	 5.061235e+002	nm	 8.045054e+001	nm														
 2.450000e+002	 2.394980e+002	 6.179756e+002	nm	 2.200851e+002	nm	-7.466758e-001	nm	 5.098089e+002	nm	 9.108561e+001	nm														
 2.450000e+002	 2.394980e+002	 6.232181e+002	nm	 2.214735e+002	nm	-1.618090e-001	nm	 5.035816e+002	nm	 9.971449e+001	nm														
 2.399980e+002	 2.394980e+002	 6.075009e+002	nm	 2.256787e+002	nm	-1.678107e+000	nm	 4.903316e+002	nm	 1.047921e+002	nm														
 2.399980e+002	 2.394980e+002	 6.206706e+002	nm	 2.220294e+002	nm	-3.107523e+000	nm	 4.880532e+002	nm	 1.146785e+002	nm

.....

[Edit Biber] 24.5.2008 -Formatierung nachgetragen.[/Edit]
Member: bastla
bastla May 24, 2008 at 14:43:22 (UTC)
Goto Top
Hallo astrarotlichtluva!

ne vb geht leider nicht
sry das ich das so spät gesagt habe.
Kein Problem (ich hatte ja auch vorher nicht gefragt face-wink) ...
Die von Dir gepostete "Splitbla.bat" passt nicht unmittelbar für Deine Problemstellung (ihr Ziel ist es, jeweils gleich große Teildateien zu erzeugen). Überdies bezweifle ich, dass sie schneller als meine im ersten Kommentar gepostete Version laufen würde.

Wie sind denn Deine Tests mit meinem Batch von oben ausgegangen?

Grüße
bastla
Member: Biber
Biber May 24, 2008 at 15:10:53 (UTC)
Goto Top
Moin astrarotlichluva,

bastla hat vollkommen Recht - die SplitBla ist für ähnliche, aber doch andere Zwecke zusammengebraten worden.
Und auch wenn wir hier nicht immer professionelle Lösungen anbieten - wir wollen doch hier nicht Nägel mit der Bohrmaschine in die Wand kloppen.

Wenn es denn partout nur Batch sein darf, ist bastlas Variante schon das relative Optimum.

Was ich bei der Gelegenheit aber noch nachfragen wollte - kannst Du denn nicht früher eingreifen? An irgendeiner Stelle muss doch festgelegt sein, dass EIN riesiges Monsterlogfile geschrieben wird und nicht eines je Vorfall/Prüfvorgang.
Und so ziemlich jede noch so dusselige Anwendung, die überhaupt Logfiles schreibt, hat an dieser Stelle Parametrisierungsmöglichkeiten. Hast Du an der Stelle schon mal geforscht?

Grüße
Biber
Member: astrarotlichluva
astrarotlichluva May 24, 2008 at 21:02:03 (UTC)
Goto Top
die batch hat leider nicht so geklapt wie gewunscht
langsam und hat nur in ein temp datei
geschierben:
echo ist ausgeschaltet


dies aber ein paar 100mal
maybe habe ich da etwas falsch übergeben habe.
schau ich mir morgen an.
sonntag = doku schau und coding tag
Member: bastla
bastla May 24, 2008 at 21:28:40 (UTC)
Goto Top
Hallo astrarotlichtluva!

maybe habe ich da etwas falsch übergeben
Das "echo ist ausgeschaltet" ging auf meine Kappe (beim Herausziehen des Schreibens der einzelnen Zeilen aus dem Unterprogramm hatte ich ein "%~1" nicht auf das richtige "%%i" geändert), den Rest habe ich auf Basis Deiner heute geposteten "echten" Logdaten
-1Block: 221	date: 15.05.08 21:27:08	Messaufgabe: Testlauf Probennummer: 844 Schichtfolge:  Prüfer: XX 
vs ursprünglich
-Block ......sadjkasdasd id:0001
ebenfalls gleich oben angepasst - daher bitte für's Testen die editierte Version verwenden ...

Übrigens: Wie gesichert ist die Anzahl der ":" in der "Block-Ende-Zeile" (die Zerlegung basiert - derzeit - darauf, dass es, inkl der in der Uhrzeit enthaltenen, genau 8 vor dem Prüfer- (= dann Datei-)namen sein müssen)?

Grüße
bastla
Member: astrarotlichluva
astrarotlichluva May 25, 2008 at 06:22:06 (UTC)
Goto Top
moin
ohh das ging aber schnell hier

Aus dem kopf wusste ich nicht so genau wie die "-Block" Zeile aussieht.
nun habe ich mir ma eine geholte.
Als Dateiname sollte die Zahl nach
"Probennummer:" genommen werden also 6 ":"


btw: wunsche dir auch einen schönen sonntag bastla
Member: astrarotlichluva
astrarotlichluva May 25, 2008 at 06:23:57 (UTC)
Goto Top
ich habe mal den
pushd
und
popd
rausgenommen und /set local
weil sich die bat in dem selber ordner wie die Logdatei befindet
also %CD%

aber er gibt mir nach der zeile:
for /f "tokens=6* delims=:" %%a in (%1) do set "LogName=%%b"

einen syntax raus

das liegt sicher dran das nach dem tack noch etwas folgt
oder wegen dem ü.

ich tokens mich mal durch das mit der Pos. 6 auch das getroffen wird was ich haben will.
aber nun erstma frühstück
Member: bastla
bastla May 25, 2008 at 09:31:10 (UTC)
Goto Top
Hallo astrarotlichtluva!

Als Dateiname sollte die Zahl nach "Probennummer:" genommen werden also 6 ":"
Dann muss die Zeile 14 so aussehen (es müssen ja auch noch der Text "Schichtfolge" und die Leerzeichen eliminiert werden):
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f"  

Das "setlocal" solltest Du auf jeden Fall belassen (damit werden die in diesem Batch erzeugten Variablen nach dem Ende des Batches wieder gelöscht), und auch "pushd" / "popd" schadet nicht, selbst wenn's nicht benötigt wird (und macht Dich flexibel, den Batch doch noch in einen anderen Ordner legen zu können).

Grüße
bastla
Member: astrarotlichluva
astrarotlichluva May 25, 2008 at 09:42:58 (UTC)
Goto Top
danke
jo jeppi die zeile 14 klappt nun
nun meckt batch rum das ein
syntax danach kommt
also bis Trim geht alles eben per hand debugt
immer echo und den pause

also in notepad++ sieht das fehlerfrei aus
gibt es ein editor der auch die syntax von batch beherrscht die dokumentation von MS ist mehr als mangelhaft.
Member: bastla
bastla May 25, 2008 at 10:09:02 (UTC)
Goto Top
Hallo astrarotlichtluva!

also bis Trim geht alles
Dann wirf das (Zeilen 16 bis 18) einfach raus - Zweck war, führende Leerzeichen zu entfernen, aber die gibt's jetzt ohnehin nicht mehr.

Grüße
bastla
Member: astrarotlichluva
astrarotlichluva May 25, 2008 at 11:07:14 (UTC)
Goto Top
mahlzeit
ok habe ich fehler besteht weiter. leider

if exist "%T%" del "%T%"  
pushd "%CD%"  
for /f "usebackq delims=" %%i in ("%CD%\%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%T%") else call :MoveFile "%%i"  
popd
goto :eof

:MoveFile
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f"  

if not exist "%LogName%.txt" move %T% "%LogName%.txt" & goto :eof  
set "Tm=0%time%"  
set "Tm=%Tm:,=%"  
set "Tm=%Tm:.=%"  
set "Tm=%Tm: =%"  
set "Tm=%Tm:~-10%  
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%"  
set "LogName=%LogName::=%  
move %T% "%LogName%.txt"  
goto :eof

der syntax liegt in der
if not exist zeile
ich habe mal die " entfert
aber immer noch
Member: bastla
bastla May 25, 2008 at 11:51:39 (UTC)
Goto Top
Damit wir auf einen gleichen Stand kommen: Bei mir funktioniert dieser Batch (%CD% als Pfad ist berücksichtigt)
@echo off & setlocal
set "LogDir=%cd%"  
set "Log=Logdatei.txt"  
set "Crit=^-1Block"  

set "T=%LogDir%\Temp.txt"  
if exist "%T%" del "%T%"  
pushd "%LogDir%"  
for /f "usebackq delims=" %%i in ("%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%T%") else call :MoveFile "%%i"  
popd
goto :eof

:MoveFile
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f"  

if not exist "%LogName%.txt" move "%T%" "%LogName%.txt" & goto :eof  
set "Tm=0%time%"  
set "Tm=%Tm:,=%"  
set "Tm=%Tm:.=%"  
set "Tm=%Tm: =%"  
set "Tm=%Tm:~-10%  
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%"  
set "LogName=%LogName::=%  
move "%T%" "%LogName%.txt"  
goto :eof
mit diesen Testdaten
 1.500020e+002	 2.144980e+002	 6.963079e+002	nm	 2.281911e+002	nm	 6.538393e-001	nm	 5.020137e+002	nm	 1.047534e+002	nm											
 1.500020e+002	 2.144980e+002	 7.074566e+002	nm	 2.353388e+002	nm	 1.580196e+000	nm	 5.003358e+002	nm	 9.508016e+001	nm														
 1.500020e+002	 2.144980e+002	 7.031426e+002	nm	 2.331226e+002	nm	 3.034034e+000	nm	 4.999146e+002	nm	 9.026766e+001	nm														
 1.450000e+002	 2.144980e+002	 6.959890e+002	nm	 2.293731e+002	nm	 2.118024e+000	nm	 4.951898e+002	nm	 9.575802e+001	nm														
 1.450000e+002	 2.144980e+002	 6.929615e+002	nm	 2.319669e+002	nm	-2.133383e+000	nm	 5.056529e+002	nm	 9.211335e+001	nm														
 1.450000e+002	 2.144980e+002	 7.021602e+002	nm	 2.271893e+002	nm	-1.397261e+000	nm	 5.033282e+002	nm	 9.374658e+001	nm														
 1.450000e+002	 2.144980e+002	 6.695101e+002	nm	 2.256670e+002	nm	-1.910170e+000	nm	 5.140209e+002	nm	 1.044900e+002	nm														
 1.450000e+002	 2.144980e+002	 6.654938e+002	nm	 2.267565e+002	nm	-2.567262e-002	nm	 5.140038e+002	nm	 1.111206e+002	nm														
-1Block: 221	date: 15.05.08 21:27:08	Messaufgabe: Testlauf Probennummer: 844 Schichtfolge:  Prüfer: XX
 2.450000e+002	 2.394980e+002	 6.213414e+002	nm	 2.202457e+002	nm	-5.858052e-001	nm	 4.958063e+002	nm	 1.069977e+002	nm														
 2.450000e+002	 2.394980e+002	 6.355864e+002	nm	 2.233881e+002	nm	-6.122822e-001	nm	 4.863254e+002	nm	 1.006662e+002	nm														
 2.450000e+002	 2.394980e+002	 6.279558e+002	nm	 2.217353e+002	nm	 1.205401e+000	nm	 5.061235e+002	nm	 8.045054e+001	nm														
 2.450000e+002	 2.394980e+002	 6.179756e+002	nm	 2.200851e+002	nm	-7.466758e-001	nm	 5.098089e+002	nm	 9.108561e+001	nm														
 2.450000e+002	 2.394980e+002	 6.232181e+002	nm	 2.214735e+002	nm	-1.618090e-001	nm	 5.035816e+002	nm	 9.971449e+001	nm														
 2.399980e+002	 2.394980e+002	 6.075009e+002	nm	 2.256787e+002	nm	-1.678107e+000	nm	 4.903316e+002	nm	 1.047921e+002	nm														
 2.399980e+002	 2.394980e+002	 6.206706e+002	nm	 2.220294e+002	nm	-3.107523e+000	nm	 4.880532e+002	nm	 1.146785e+002	nm
-1Block: 221	date: 15.05.08 21:29:14	Messaufgabe: Testlauf Probennummer: 845 Schichtfolge:  Prüfer: XX
Es drängt sich daher die Vermutung auf, dass es an der "-1Block"-Zeile liegt (und, nur zur Sicherheit: die letzte Zeile des Logs muss natürlich auch eine solche sein).

Zur Kontrolle könntest Du die Zeile 14 wie folgt ändern und in der nächsten Zeile den ermittelten Dateinamen ausgeben lassen:
for /f "tokens=7 delims=:" %%a in (%1) do echo "%%a" & for /f %%f in ("%%a") do set "LogName=%%f"  
echo "%LogName%"  
Das Ergebnis sieht bei mir so aus:
" 844 Schichtfolge"  
"844"  
" 845 Schichtfolge"  
"845"  

Grüße
bastla

^^[Edit] Anführungszeichen für "%T%" in Zeilen 16 und 24 nachgetragen [/Edit]
Member: astrarotlichluva
astrarotlichluva May 25, 2008 at 12:14:20 (UTC)
Goto Top
re
ja die leitze zeile ist auch ein "-Block:" Zeile


also die Ausgabe sieht so aus
nur das zwischen Zeile 02 und 03
bei mir kommt:
The syntax of the command is incorrect
dies bezieht sich auf auf Zeile
if not exist "%LogName%.txt" move %T% "%LogName%.txt" & goto :eof

also getest %LogName%
die var. gibt es und sieht gut aus
bei %T% auch das selbe
und goto:eof oder goto :eof
ist ja selbe
move kann es nicht liegen den mov kann man mit und ohne " ausfrühen egal (in diesem Fall)


kann es probleme geben wenn statt 884 ...
auch mal - und buchstaben in stehen
als dateiname
fällt mir gerade auch das da ne grossen T drin vorkommen kann.

@echo off & setlocal
for /f "tokens=4" %%g in ('dir *.txt ^|find "exp" ') do set "LogFile=%%g"  
set "Log=%LogFile%"  
set "Crit=^-1Block"  

set "TempFile=%cd%\Temp.txt"  
if exist "%TempFile%" del "%TempFile%"  
pushd "%cd%"  
for /f "usebackq delims=" %%i in ("%cd%\%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%TempFile%") else call :MoveFile "%%i"  
popd
goto :eof

:MoveFile
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f"  

if not exist "%LogName%.txt" move %TempFile% "%LogName%.txt" & goto :eof  
set "Tm=0%time%"  
set "Tm=%Tm:,=%"  
set "Tm=%Tm:.=%"  
set "Tm=%Tm: =%"  
set "Tm=%Tm:~-10%  
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%"  
set "LogName=%LogName::=%  
move %TempFile% "%LogName%.txt"  
goto :eof
Member: bastla
bastla May 25, 2008 at 12:28:15 (UTC)
Goto Top
Wenn Du in den Zeilen 16 und 24 (ist oben in Antwort #15 bereits berücksichtigt) das "%T%" unter Anführungszeichen setzt, sollte es funktionieren (ich hatte leider wieder einmal für meinen Testordner einen Pfad ohne enthaltene Leerzeichen verwendet face-sad).

kann es probleme geben wenn statt 884 ... auch mal - und buchstaben in stehen als dateiname
Solange es keine Leerzeichen, Anführungszeichen oder etwas in der Art von "<|>&" ist, sind eigentlich keine Probleme zu erwarten.

Grüße
bastla
Member: astrarotlichluva
astrarotlichluva May 25, 2008 at 12:35:36 (UTC)
Goto Top
habe das "T" problem mit einer Umbenennung umgangen
soltle nun nicht mehr eine Rolle Spielen

kann es darnliegen das nach dem : ein Leerzeichen kommt?
Member: bastla
bastla May 25, 2008 at 12:38:26 (UTC)
Goto Top
Das Problem resultiert vermutlich aus dem Pfad - daher entweder beim "move" für das "TempFile" Anführungszeichen verwenden oder das "TempFile" ohne Pfadangabe (und ohne enthaltene Leerzeichen - ist ja derzeit ohnehin so) festlegen.

Grüße
bastla
Member: astrarotlichluva
astrarotlichluva May 25, 2008 at 12:44:26 (UTC)
Goto Top
wie krass
nur an den kleinen " -Zeichen lag es
echt super vielen danke bastla.
alle für die gedult

so nun für andere die auch solche oder ähnliche problem habe:
@echo off & setlocal
for /f "tokens=4" %%g in ('dir *.txt ^|find "exp" ') do set "LogFile=%%g"  
set "Log=%LogFile%"  
set "Crit=^-1Block"  

set "TempFile=%cd%\Temp.txt"  
if exist "%TempFile%" del "%TempFile%"  
pushd "%cd%"  
for /f "usebackq delims=" %%i in ("%cd%\%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%TempFile%") else call :MoveFile "%%i"  
popd
goto :eof

:MoveFile
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f"  

if not exist "%LogName%.txt" move "%TempFile%" "%LogName%.txt" & goto :eof  
set "Tm=0%time%"  
set "Tm=%Tm:,=%"  
set "Tm=%Tm:.=%"  
set "Tm=%Tm: =%"  
set "Tm=%Tm:~-10%  
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%"  
set "LogName=%LogName::=%  
move "%TempFile%" "%LogName%.txt"  
goto :eof
Member: bastla
bastla May 25, 2008 at 14:07:51 (UTC)
Goto Top
Hallo astrarotlichtluva!

Sorry, dass ich nicht schon früher genauer gearbeitet habe - hätte uns einige Zeit erspart ...

Zum Abschluss noch die auf die wesentlichen Teile reduzierte Fassung:
@echo off & setlocal
for /f "tokens=4" %%g in ('dir *.txt ^|find "exp"') do set "Log=%%g"  
set "Crit=^-1Block"  
set "TempFile=Temp.txt"  

if exist "%TempFile%" del "%TempFile%"  
for /f "usebackq delims=" %%i in ("%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%TempFile%") else call :MoveFile "%%i"  
goto :eof

:MoveFile
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f"  

if not exist "%LogName%.txt" move "%TempFile%" "%LogName%.txt" & goto :eof  
set "Tm=0%time%"  
set "Tm=%Tm:,=%"  
set "Tm=%Tm:.=%"  
set "Tm=%Tm: =%"  
set "Tm=%Tm:~-10%  
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%"  
set "LogName=%LogName::=%  
move "%TempFile%" "%LogName%.txt"  
goto :eof

Grüße
bastla
Member: Biber
Biber May 25, 2008 at 14:12:53 (UTC)
Goto Top
Moin astrarotlichluva,

da der Beitrag aus Deiner Sicht gelöst zu sein scheint, noch zwei Bitten:
- bitte den Beitrag auch auf "Erledigt" setzen
- und noch einmal von mir die Frage: Kannst Du nicht schon beim Erzeugen dieser Logdatei(en) eingreifen und Logdateien je Prüfvorgang schreiben lassen?

Grüße
Biber
Member: astrarotlichluva
astrarotlichluva May 25, 2008 at 15:06:46 (UTC)
Goto Top
leider kann ich auf der erzeuigen der log datei nur den speicherort ändern
mehr lässt das programm nicht zu.

und auf erledigt setzt ich es
muss nur ma suchen wo das ist.

vielen danke bastla noch mal