Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Log Datei teilen und zeile als Dateiname auslesen

Frage Entwicklung Batch & Shell

Mitglied: astrarotlichluva

astrarotlichluva (Level 1) - Jetzt verbinden

22.05.2008, aktualisiert 25.05.2008, 6349 Aufrufe, 23 Kommentare

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
Mitglied: bastla
22.05.2008 um 20:13 Uhr
Hallo astrarotlichluva und willkommen im Forum!

Das könnte etwa so gehen:
01.
@echo off & setlocal 
02.
set "LogDir=D:\Logs" 
03.
set "Log=Logdatei.txt" 
04.
set "Crit=^-1Block" 
05.
 
06.
set "T=%LogDir%\Temp.txt" 
07.
if exist "%T%" del "%T%" 
08.
pushd "%LogDir%" 
09.
for /f "usebackq delims=" %%i in ("%LogDir%\%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%T%") else call :MoveFile "%%i" 
10.
popd 
11.
goto :eof 
12.
 
13.
:MoveFile 
14.
for /f "tokens=8* delims=:" %%a in (%1) do set "LogName=%%b" 
15.
 
16.
:Trim 
17.
if "%LogName:~,1%"==" " set "LogName=%LogName:~1%" & goto :Trim 
18.
 
19.
if not exist "%LogName%.txt" move %T% "%LogName%.txt" & goto :eof 
20.
set "Tm=0%time%" 
21.
set "Tm=%Tm:,=%" 
22.
set "Tm=%Tm:.=%" 
23.
set "Tm=%Tm: =%" 
24.
set "Tm=%Tm:~-10% 
25.
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%" 
26.
set "LogName=%LogName::=% 
27.
move %T% "%LogName%.txt" 
28.
goto :eof
Grüße
bastla

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

[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]
Bitte warten ..
Mitglied: astrarotlichluva
22.05.2008 um 20:23 Uhr
jo ich schau mal aber vilene danke schonmal
kann ich leider erst morgen testen.
sage den ebscheit ob es "lauft" oder rennt
Bitte warten ..
Mitglied: bastla
22.05.2008 um 20:57 Uhr
Hallo astrarotlichluva!

Wenn es keine grundsätzlichen Einwände gegen VBScript gibt, hätte ich hier noch eine Alternative zum Batch:
01.
'SplitLogFile.vbs 
02.
Const LogDir = "D:\Logs" 
03.
Const LogFile = "Logdatei.txt" 
04.
Const Crit = "-Block" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
LogText = Split(fso.OpenTextFile(LogDir & "\" & LogFile).ReadAll, vbCrLF) 
08.
 
09.
CritLen = Len(Crit) 
10.
LogPart = "" 
11.
 
12.
For Each Line In LogText 
13.
    If Left(Line, CritLen) <> Crit Then 
14.
        LogPart = LogPart & Line & vbCrLF 
15.
    Else 
16.
        LogPartName = Mid(Line, InStrRev(Line, ":") + 1) 
17.
        If fso.FileExists(LogDir & "\" & LogPartName & ".txt") Then 
18.
            D = Date 
19.
            LogPartName = LogPartName & "_" _ 
20.
                & Mid(D, 7) & Mid(D, 4, 2) & Left(D, 2) _ 
21.
                & Replace(Time, ":", "") 
22.
            fso.CreateTextFile(LogDir & "\" & LogPartName & ".txt").Write LogPart 
23.
            LogPart = "" 
24.
        End If 
25.
    End If 
26.
Next
Grüße
bastla
Bitte warten ..
Mitglied: astrarotlichluva
24.05.2008 um 15:02 Uhr
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

Mit freundlichen Grüßen astra

01.
::-----snipp Splitbla.bat Vers. 0.3----    
02.
@echo off     
03.
IF (%1)==() (echo Syntax %0 inputfile) & goto :eof     
04.
IF not exist "%1" echo (Datei %1 nicht gefunden) & goto :eof     
05.
 
06.
SET "blafile=%1" 
07.
REM (set /a cntLn=0 )             && REM Zeilenzähler     
08.
REM (set /a MaxLnsPerFile=500)    && REM Max. Zeilen je Splitdatei, eigentlich Konstante     
09.
REM (set /a FileCnt=1 )           && REM Zähler für die Splitdateien     
10.
 
11.
Set "Dirty=TRUE"              && REM DirtyFlag.. muss ich noch eine Datei "endgültig" schreiben?     
12.
 
13.
IF exist %temp%\tmpbla*.tmp del /q %temp%\tmpbla-*.tmp >nul     
14.
FOR /F "Tokens=1* delims=" %%a IN ('type %blafile%') do call :WriteTmp %1 "%%a"     
15.
IF "%Dirty%"=="TRUE" call :WriteFinal %~n1-%FileCnt%%~x1  
16.
echo Datei %1 zerlegt in Dateien %~n1-1%~x1 bis %~n1-%FileCnt%%~x1.    
17.
 
18.
goto :eof  
19.
 
20.
---------hier Ende der Welt     
21.
 
22.
:WriteTmp     
23.
 
24.
 
25.
Set /a cntln=%cntln%+1     
26.
IF %cntln% GEQ 1 (     
27.
   echo %~2>>%temp%\tmpbla-%FileCnt%.tmp     
28.
   SET "Dirty=TRUE"     
29.
   If %cntln% EQU %MaxLnsPerFile% call :WriteFinal %~n1-%FileCnt%%~x1   
30.
)  
31.
 
32.
goto :eof     
33.
 
34.
------- ende WriteTmp-Block...zurück zur FOR.. IN.. DO..Schleife     
35.
 
36.
:WriteFinal     
37.
Copy /b "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul     
38.
REM Copy /b "%temp%\Headline.Txt"+ "%temp%\tmpbla-%FileCnt%.tmp" "%1" >nul    
39.
SET "Dirty=FALSE" & (set /a cntln=1) & (set /a FileCnt=%FileCnt%+1)     
40.
goto :eof    
41.
::-----snapp Splitbla.bat Vers. 0.3---- 

die log datei aufbau noch ma:
01.
..... 
02.
 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											 
03.
 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														 
04.
 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														 
05.
 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														 
06.
 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														 
07.
 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														 
08.
 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														 
09.
 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														 
10.
-1Block: 221	date: 15.05.08 21:27:08	Messaufgabe: Testlauf Probennummer: 844 Schichtfolge:  Prüfer: XX 
11.
 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														 
12.
 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														 
13.
 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														 
14.
 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														 
15.
 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														 
16.
 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														 
17.
 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 
18.
 
19.
.....
[Edit Biber] 24.5.2008 <code>-Formatierung nachgetragen.[/Edit]
Bitte warten ..
Mitglied: bastla
24.05.2008 um 16:43 Uhr
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 ) ...
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
Bitte warten ..
Mitglied: Biber
24.05.2008 um 17:10 Uhr
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
Bitte warten ..
Mitglied: astrarotlichluva
24.05.2008 um 23:02 Uhr
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
Bitte warten ..
Mitglied: bastla
24.05.2008 um 23:28 Uhr
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
01.
-1Block: 221	date: 15.05.08 21:27:08	Messaufgabe: Testlauf Probennummer: 844 Schichtfolge:  Prüfer: XX 
vs ursprünglich
01.
-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
Bitte warten ..
Mitglied: astrarotlichluva
25.05.2008 um 08:22 Uhr
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
Bitte warten ..
Mitglied: astrarotlichluva
25.05.2008 um 08:23 Uhr
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
Bitte warten ..
Mitglied: bastla
25.05.2008 um 11:31 Uhr
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):
01.
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
Bitte warten ..
Mitglied: astrarotlichluva
25.05.2008 um 11:42 Uhr
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.
Bitte warten ..
Mitglied: bastla
25.05.2008 um 12:09 Uhr
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
Bitte warten ..
Mitglied: astrarotlichluva
25.05.2008 um 13:07 Uhr
mahlzeit
ok habe ich fehler besteht weiter. leider

01.
if exist "%T%" del "%T%" 
02.
pushd "%CD%" 
03.
for /f "usebackq delims=" %%i in ("%CD%\%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%T%") else call :MoveFile "%%i" 
04.
popd 
05.
goto :eof 
06.
 
07.
:MoveFile 
08.
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f" 
09.
 
10.
if not exist "%LogName%.txt" move %T% "%LogName%.txt" & goto :eof 
11.
set "Tm=0%time%" 
12.
set "Tm=%Tm:,=%" 
13.
set "Tm=%Tm:.=%" 
14.
set "Tm=%Tm: =%" 
15.
set "Tm=%Tm:~-10% 
16.
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%" 
17.
set "LogName=%LogName::=% 
18.
move %T% "%LogName%.txt" 
19.
goto :eof
der syntax liegt in der
if not exist zeile
ich habe mal die " entfert
aber immer noch
Bitte warten ..
Mitglied: bastla
25.05.2008 um 13:51 Uhr
Damit wir auf einen gleichen Stand kommen: Bei mir funktioniert dieser Batch (%CD% als Pfad ist berücksichtigt)
01.
@echo off & setlocal 
02.
set "LogDir=%cd%" 
03.
set "Log=Logdatei.txt" 
04.
set "Crit=^-1Block" 
05.
 
06.
set "T=%LogDir%\Temp.txt" 
07.
if exist "%T%" del "%T%" 
08.
pushd "%LogDir%" 
09.
for /f "usebackq delims=" %%i in ("%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%T%") else call :MoveFile "%%i" 
10.
popd 
11.
goto :eof 
12.
 
13.
:MoveFile 
14.
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f" 
15.
 
16.
if not exist "%LogName%.txt" move "%T%" "%LogName%.txt" & goto :eof 
17.
set "Tm=0%time%" 
18.
set "Tm=%Tm:,=%" 
19.
set "Tm=%Tm:.=%" 
20.
set "Tm=%Tm: =%" 
21.
set "Tm=%Tm:~-10% 
22.
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%" 
23.
set "LogName=%LogName::=% 
24.
move "%T%" "%LogName%.txt" 
25.
goto :eof
mit diesen Testdaten
01.
 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											 
02.
 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														 
03.
 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														 
04.
 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														 
05.
 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														 
06.
 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														 
07.
 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														 
08.
 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														 
09.
-1Block: 221	date: 15.05.08 21:27:08	Messaufgabe: Testlauf Probennummer: 844 Schichtfolge:  Prüfer: XX 
10.
 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														 
11.
 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														 
12.
 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														 
13.
 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														 
14.
 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														 
15.
 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														 
16.
 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 
17.
-1Block: 221	date: 15.05.08 21:29:14	Messaufgabe: Testlauf Probennummer: 845 Schichtfolge:  Prüfer: XX 
18.
 
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:
01.
for /f "tokens=7 delims=:" %%a in (%1) do echo "%%a" & for /f %%f in ("%%a") do set "LogName=%%f" 
02.
echo "%LogName%"
Das Ergebnis sieht bei mir so aus:
01.
" 844 Schichtfolge" 
02.
"844" 
03.
" 845 Schichtfolge" 
04.
"845"
Grüße
bastla

^^[Edit] Anführungszeichen für "%T%" in Zeilen 16 und 24 nachgetragen [/Edit]
Bitte warten ..
Mitglied: astrarotlichluva
25.05.2008 um 14:14 Uhr
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.

01.
@echo off & setlocal 
02.
for /f "tokens=4" %%g in ('dir *.txt ^|find "exp" ') do set "LogFile=%%g" 
03.
set "Log=%LogFile%" 
04.
set "Crit=^-1Block" 
05.
 
06.
set "TempFile=%cd%\Temp.txt" 
07.
if exist "%TempFile%" del "%TempFile%" 
08.
pushd "%cd%" 
09.
for /f "usebackq delims=" %%i in ("%cd%\%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%TempFile%") else call :MoveFile "%%i" 
10.
popd 
11.
goto :eof 
12.
 
13.
:MoveFile 
14.
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f" 
15.
 
16.
if not exist "%LogName%.txt" move %TempFile% "%LogName%.txt" & goto :eof 
17.
set "Tm=0%time%" 
18.
set "Tm=%Tm:,=%" 
19.
set "Tm=%Tm:.=%" 
20.
set "Tm=%Tm: =%" 
21.
set "Tm=%Tm:~-10% 
22.
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%" 
23.
set "LogName=%LogName::=% 
24.
move %TempFile% "%LogName%.txt" 
25.
goto :eof
Bitte warten ..
Mitglied: bastla
25.05.2008 um 14:28 Uhr
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 ).

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
Bitte warten ..
Mitglied: astrarotlichluva
25.05.2008 um 14:35 Uhr
habe das "T" problem mit einer Umbenennung umgangen
soltle nun nicht mehr eine Rolle Spielen

kann es darnliegen das nach dem : ein Leerzeichen kommt?
Bitte warten ..
Mitglied: bastla
25.05.2008 um 14:38 Uhr
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
Bitte warten ..
Mitglied: astrarotlichluva
25.05.2008 um 14:44 Uhr
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:
01.
@echo off & setlocal 
02.
for /f "tokens=4" %%g in ('dir *.txt ^|find "exp" ') do set "LogFile=%%g" 
03.
set "Log=%LogFile%" 
04.
set "Crit=^-1Block" 
05.
 
06.
set "TempFile=%cd%\Temp.txt" 
07.
if exist "%TempFile%" del "%TempFile%" 
08.
pushd "%cd%" 
09.
for /f "usebackq delims=" %%i in ("%cd%\%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%TempFile%") else call :MoveFile "%%i" 
10.
popd 
11.
goto :eof 
12.
 
13.
:MoveFile 
14.
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f" 
15.
 
16.
if not exist "%LogName%.txt" move "%TempFile%" "%LogName%.txt" & goto :eof 
17.
set "Tm=0%time%" 
18.
set "Tm=%Tm:,=%" 
19.
set "Tm=%Tm:.=%" 
20.
set "Tm=%Tm: =%" 
21.
set "Tm=%Tm:~-10% 
22.
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%" 
23.
set "LogName=%LogName::=% 
24.
move "%TempFile%" "%LogName%.txt" 
25.
goto :eof
Bitte warten ..
Mitglied: bastla
25.05.2008 um 16:07 Uhr
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:
01.
@echo off & setlocal 
02.
for /f "tokens=4" %%g in ('dir *.txt ^|find "exp"') do set "Log=%%g" 
03.
set "Crit=^-1Block" 
04.
set "TempFile=Temp.txt" 
05.
 
06.
if exist "%TempFile%" del "%TempFile%" 
07.
for /f "usebackq delims=" %%i in ("%Log%") do echo %%i|findstr "%Crit%">nul & if errorlevel 1 (echo %%i >>"%TempFile%") else call :MoveFile "%%i" 
08.
goto :eof 
09.
 
10.
:MoveFile 
11.
for /f "tokens=7 delims=:" %%a in (%1) do for /f %%f in ("%%a") do set "LogName=%%f" 
12.
 
13.
if not exist "%LogName%.txt" move "%TempFile%" "%LogName%.txt" & goto :eof 
14.
set "Tm=0%time%" 
15.
set "Tm=%Tm:,=%" 
16.
set "Tm=%Tm:.=%" 
17.
set "Tm=%Tm: =%" 
18.
set "Tm=%Tm:~-10% 
19.
set "LogName=%LogName%_%date:~-4%%date:~-7,2%%date:~-10,2%%Tm%" 
20.
set "LogName=%LogName::=% 
21.
move "%TempFile%" "%LogName%.txt" 
22.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Biber
25.05.2008 um 16:12 Uhr
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
Bitte warten ..
Mitglied: astrarotlichluva
25.05.2008 um 17:06 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull zum Thema Batch & Shell ...

Installation
gelöst Mit Powershell in einer Datei eine Zeile auslesen (6)

Frage von Bommi1961 zum Thema Installation ...

Netzwerkmanagement
gelöst Sophos UTM220 - Appliance CPU Auslastung LOG-Datei downloaden? (7)

Frage von 1410640014 zum Thema Netzwerkmanagement ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...