Top-Themen

Aktuelle Themen (A bis Z)

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

Pro Zeile Logfile erzeugen, und bei nächsten Durchlauf der Vorlage Prüfen, ob es die Zeile schon gibt, aber wie?

Frage Entwicklung Batch & Shell

Mitglied: Lyriker

Lyriker (Level 1) - Jetzt verbinden

21.06.2013, aktualisiert 24.06.2013, 1374 Aufrufe, 6 Kommentare

Liebe Helfer,
habe hier wieder eine neue Maschine, deren Inhalt ich auch schon in eine gute Form bringe. Leider ist das Logfile ein Mist, weil die Maschine ununterbrochen in das File schreibt, und keine einzelnen Logs auswirft, und das Log einfach zwischendurch wieder die alten Zeilen löscht. Das heißt das ich jeden Tag einen Überhang habe, den ich natürlich nicht doppelt in die Datenbank pflegen will.

Deshalb wollte ich ein Art Log schrieben, der jede Zeile vorab prüft, ob es diese schon importiert hat.

als Identifier habe ich das Datum und die Uhrzeit (10.06.2013 16:34:01.530) erkoren, denn hier ist sicher gestellt, das diese die eindeutige Reihe der Daten erfasst.

Doch irgendwie... geht nüscht.

Beispiel:

Quelle:
01.
F : 10.06.2013 16:34:01.530  Msg.: 1100 FZ: 03:04:20:537 BZ: 05:52:10:419 SZ: 00:29:24:719 STZ:0314 STZ/h:0033.3 --> OK 
02.
T : 10.06.2013 16:34:35.779  Msg.: 0003 FZ: 03:04:54:786 BZ: 05:52:10:419 SZ: 00:29:24:719 STZ:0315 STZ/h:0033.4 --> Fertigmeldung --> {;X;39;0039;307910;007;020;002;000000101977;  0.0;1748;H;071305;010;1748.0;002/002;;;;;24;} / GR071305.asc 
03.
F : 10.06.2013 16:34:50.190  Msg.: 1203 FZ: 03:05:09:197 BZ: 05:52:10:419 SZ: 00:29:24:719 STZ:0315 STZ/h:0033.3 --> Keine Leisten eingelegt 
04.
T : 10.06.2013 16:34:56.198  Msg.: 0003 FZ: 03:05:09:197 BZ: 05:52:16:428 SZ: 00:29:24:719 STZ:0316 STZ/h:0033.4 --> Fertigmeldung --> {;X;80;0080;307910;007;019;002;000000101977;  0.0;485;H;071305;010;485.0;002/002;;;;;24;} / GR071305.asc 
05.
F : 10.06.2013 16:38:09.086  Msg.: 1102 FZ: 03:05:09:197 BZ: 05:55:29:315 SZ: 00:29:24:719 STZ:0316 STZ/h:0033.3 --> Notaus aktiv ( Notaus entriegeln + <I-Taster> ) 
06.
F : 10.06.2013 16:38:19.901  Msg.: 1103 FZ: 03:05:09:197 BZ: 05:55:29:315 SZ: 00:29:35:535 STZ:0316 STZ/h:0033.2 --> Keine Reglerfeigabe ( <Reset> ) 
07.
F : 10.06.2013 16:38:20.502  Msg.: 1301 FZ: 03:05:09:197 BZ: 05:55:29:315 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Bitte Ablauf starten ( <NC-Start> ) 
08.
F : 10.06.2013 16:38:29.515  Msg.: 1203 FZ: 03:05:09:197 BZ: 05:55:38:328 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Keine Leisten eingelegt 
09.
F : 10.06.2013 16:38:30.116  Msg.: 1305 FZ: 03:05:09:197 BZ: 05:55:38:928 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Leisten einlegen !!! 
10.
F : 10.06.2013 16:38:33.120  Msg.: 1304 FZ: 03:05:09:197 BZ: 05:55:41:933 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Leiste einlegen und starten ( <NC-Start> ) 
11.
F : 10.06.2013 16:38:46.940  Msg.: 1100 FZ: 03:05:09:197 BZ: 05:55:55:753 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> OK 
12.
F : 10.06.2013 16:39:10.975  Msg.: 1203 FZ: 03:05:33:231 BZ: 05:55:55:753 SZ: 00:29:36:136 STZ:0316 STZ/h:0033.2 --> Keine Leisten eingelegt 
13.
T : 10.06.2013 16:39:17.584  Msg.: 0003 FZ: 03:05:33:231 BZ: 05:56:02:363 SZ: 00:29:36:136 STZ:0317 STZ/h:0033.3 --> Fertigmeldung --> {;X;72;0072;307910;004;028;002;000000101977;  0.0;616;H;071305;010;616.0;002/002;;;;;24;} / GR071305.asc 
14.
F : 10.06.2013 16:39:32.606  Msg.: 1102 FZ: 03:05:33:231 BZ: 05:56:17:384 SZ: 00:29:36:136 STZ:0317 STZ/h:0033.3 --> Notaus aktiv ( Notaus entriegeln + <I-Taster> ) 
15.
F : 10.06.2013 16:39:39.816  Msg.: 1301 FZ: 03:05:33:231 BZ: 05:56:17:384 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> Bitte Ablauf starten ( <NC-Start> ) 
16.
F : 10.06.2013 16:39:44.022  Msg.: 1203 FZ: 03:05:33:231 BZ: 05:56:21:590 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> Keine Leisten eingelegt 
17.
F : 10.06.2013 16:39:45.224  Msg.: 1305 FZ: 03:05:33:231 BZ: 05:56:22:791 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> Leisten einlegen !!! 
18.
F : 10.06.2013 16:39:47.627  Msg.: 1304 FZ: 03:05:33:231 BZ: 05:56:25:195 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> Leiste einlegen und starten ( <NC-Start> ) 
19.
F : 10.06.2013 16:39:57.842  Msg.: 1100 FZ: 03:05:33:231 BZ: 05:56:35:410 SZ: 00:29:43:347 STZ:0317 STZ/h:0033.3 --> OK


Batch
01.
@echo off & setlocal 
02.
set "battemp=Bootctrl.__2" 
03.
set "Sammel=.\export\export.csv" 
04.
set "abgearb=.\abgearbeitet" 
05.
 
06.
for /f "usebackq tokens=1* delims=:" %%A in ("%battemp%") do ( 
07.
    for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23*" %%C in ("%%B") do ( 
08.
         
09.
REM DIESE FOR SCHLEIFE SOLL MIR DAS LOGFILE ERZEUGEN, UND BEI BESTEHENDER LOG DAS SCHREIBEN IN DIE DATEI EXPORT.CSV VERHINDERN: 
10.
               for /f "usebackq tokens=1,2,3* delims=:" %%j in ('%%D') do ( 
11.
			REM HIER SCHREIBT ER DAS LOG: 
12.
			echo|set /p =".">>"%%C_%%j%%k%%l" 
13.
14.
		echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%sammel%" 
15.
		for /f "usebackq tokens=1* delims=:" %%V in ('%%M') do ( 
16.
			echo|set /p ="%%V~">>"%sammel%" 
17.
			echo|set /p ="%%W~">>"%sammel%" 
18.
19.
		for /f "usebackq tokens=1* delims=:" %%X in ('%%N') do ( 
20.
			echo|set /p ="%%X~">>"%sammel%" 
21.
			echo|set /p ="%%Y~">>"%sammel%" 
22.
23.
		echo %%O~%%P %%Q %%R %%S %%T %%U >>"%sammel%"		 
24.
		 
25.
26.
 
27.
28.
 
--- 24.06.2013 hinzugefügt ---
Hier das geschriebene Ergebnis, das dann bei erfolgreichem Export in die Datenbank gelöscht wird:
01.
Rotox_ZEA3976001~10.06.2013~16:34:01.530~Msg.:~1100~FZ:~03:04:20:537~BZ:~05:52:10:419~SZ:~00:29:24:719~STZ~0314~STZ/h~0033.3~-->~OK
--- Ende hinzugefügt ---

Danke schon mal für die Hilfe! Selbst man mir auf die Sprünge hilft, bin ich für jeden Vorschlag dankbar.
Vielleicht macht auch das Nahende Wochenende mein Kopf wuschig ;)

Vorab vieleicht noch:

Quelldatei lässt sich nicht anpassen, und VB kann ich nur bedingt nutzen.

Danke!

Viele Grüß
Lyk
Mitglied: Endoro
21.06.2013 um 19:13 Uhr
Hallo Lyk,

du könntest die Struktur (den "Header") von export.csv mal aufschreiben und ein Beispiel posten.


lg
Bitte warten ..
Mitglied: bastla
21.06.2013, aktualisiert um 21:52 Uhr
Hallo Lyriker!

Prüfen, ob es die Zeile schon gibt, würde ich schematisch etwa so:
findstr /c:"10.06.2013 16:34:01.530" "%Sammel%">nul || echo gibt es noch nicht, daher schreiben
oder
findstr /c:"10.06.2013 16:34:01.530" "%Sammel%">nul && echo gibt es schon, daher überspringen
wobei Datum und Uhrzeit als Suchbegriff natürlich in (einer) Variablen enthalten sein müssten.

Wichtig: Damit das funktionieren kann, muss "%Sammel%" bereits vorweg existieren, was sich zB per
type nul>"%Sammel%"
realisieren ließe ...

Grüße
bastla
Bitte warten ..
Mitglied: Lyriker
24.06.2013, aktualisiert um 09:34 Uhr
Hallo und schönen Montag!

in 5 Tagen ist wieder Wochenende! ;)


@Endoro:
--- 24.06.2013 hinzugefügt ---
Hier das geschriebene Ergebnis, das dann bei erfolgreichem Export in die Datenbank gelöscht wird:
01.
Rotox_ZEA3976001~10.06.2013~16:34:01.530~Msg.:~1100~FZ:~03:04:20:537~BZ:~05:52:10:419~SZ:~00:29:24:719~STZ~0314~STZ/h~0033.3~-->~OK
--- Ende hinzugefügt ---

Habe ich auch in den Anfang übernommen

@bastla:

Leider kann man das nicht über die Exportdatei realisieren, weil diese nach erfolgreichem Export in die Datenbank gelöscht werden soll. Aber anstatt für jede Zeile könnte ich natürlich die Export Datei als Log weg schreiben, danke, damit werde ich mal experimentieren!

Aber sehr performant wird das auch nicht sein oder? ;)

Das Script ist schon so ewig langsam... ;) Überlege grad über eine bessere Lösung nach, was schwierig ist, weil ja bestimmte Teile der Token nach bearbeitet werden müssen.

Ich hatte eine Vorablösung schon realisiert (eine Sprungmarke per GOTO aus einer FOR Schleife) nur hat dann das Script nach dem zweiten Durchlauf einfach abgebrochen.

Danke vielmals!

NACHTRAG: gerade festgestellt das die Maschine immer wieder wechselnd über zwei verschiedene Logs schriebt, sobald 10000 Datensätze abgearbeitet sind.

Datei 1 ist Bootctrl.__1
Datei 2 ist Bootctrl.__2

Nur das es dann nicht verwirrend ist, wenn ich diese über einen Call dann aufrufe in das Script.

NACHTRAG ende
Bitte warten ..
Mitglied: Lyriker
24.06.2013 um 10:00 Uhr
Ok nochmals getestet, folgendes Script probiert:

~~snipp~~
01.
 
02.
		findstr /c:"%%C %%D" "D:/Rotox/ZEA3976001/Log/abgearbeitet/export.csv">nul || goto :endeeins 
03.
		echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%sammel%" 
04.
		for /f "usebackq tokens=1* delims=:" %%V in ('%%M') do ( 
05.
			echo|set /p ="%%V~">>"%sammel%" 
06.
			echo|set /p ="%%W~">>"%sammel%" 
07.
08.
		for /f "usebackq tokens=1* delims=:" %%X in ('%%N') do ( 
09.
			echo|set /p ="%%X~">>"%sammel%" 
10.
			echo|set /p ="%%Y~">>"%sammel%" 
11.
12.
		echo %%O~%%P %%Q %%R %%S %%T %%U >>"%sammel%" 
13.
		goto :ende 
14.
		:endeeins 
15.
		echo uebersprungen! 
16.
		pause 
17.
		:ende 
18.
		echo normales Ende! 
19.
		rem pause 
20.
		)
~~snipp~~


Leider bricht es dann den kompletten Batch ab... obwohl neue Datensätze in der Vorlage dazu gekommen sind!

*Pistole an den PC hebt*

Ok jetzt geht es mir besser.

Wäre über Ideen dankbar!
Bitte warten ..
Mitglied: bastla
24.06.2013 um 14:41 Uhr
Hallo Lyriker!

Deine Zeile 2 besagt (wegen "||"): Wenn es den Timestamp "%%C %%D" nicht in der csv-Datei gibt, überspringe das Schreiben - ist das so gewollt?

Falls nicht, könntest Du ja einmal
01.
		findstr /c:"%%C %%D" "D:/Rotox/ZEA3976001/Log/abgearbeitet/export.csv">nul && ( 
02.
			echo uebersprungen! 
03.
			pause 
04.
		) || ( 
05.
			echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%sammel%" 
06.
			for /f "usebackq tokens=1* delims=:" %%V in ('%%M') do ( 
07.
				echo|set /p ="%%V~">>"%sammel%" 
08.
				echo|set /p ="%%W~">>"%sammel%" 
09.
10.
			for /f "usebackq tokens=1* delims=:" %%X in ('%%N') do ( 
11.
				echo|set /p ="%%X~">>"%sammel%" 
12.
				echo|set /p ="%%Y~">>"%sammel%" 
13.
14.
			echo %%O~%%P %%Q %%R %%S %%T %%U >>"%sammel%" 
15.
			echo normales Ende! 
16.
			rem pause 
17.
		)
versuchen ...

Grüße
bastla
Bitte warten ..
Mitglied: Lyriker
24.06.2013 um 15:08 Uhr
Hi!

das ist natürlich eine galante(re) Lösung! ;)

Nach Hin und Her probieren habe ich es so realisiert:

Ich schreibe ein Logfile in dem der Stand hinterlegt ist.

Es funktioniert wenngleich es wirklich langsam ist, aber die zeit haben wir, zumal es ja nie immer 10000 Zeilen zu importieren gibt.

Vielen Vielen Dank für die Hilfe nochmals!

01.
@echo off & setlocal enabledelayedexpansion 
02.
if exist ".\export\export.csv" ( 
03.
del ".\export\export.csv"  
04.
05.
rem set "battemp=D:\Rotox\ZEA3976001\Log\Bootctrl.__2" 
06.
set "log_temp=D:\Rotox\ZEA3976001\Log\abgearbeitet\log_temp.csv" 
07.
set "Sammel=D:\Rotox\ZEA3976001\Log\export\export.csv" 
08.
set "log=D:\Rotox\ZEA3976001\Log\abgearbeitet\log.csv" 
09.
for /f "usebackq tokens=1* delims=:" %%A in ("%battemp%") do ( 
10.
    for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23*" %%C in ("%%B") do ( 
11.
		findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%sammel%" 
12.
		findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="Rotox_ZEA3976001~%%C~%%D~%%E~%%F~%%G~%%H~%%I~%%J~%%K~%%L~">>"%log_temp%" 
13.
		for /f "usebackq tokens=1* delims=:" %%a in ('%%M') do ( 
14.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%a~">>"%sammel%" 
15.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%b~">>"%sammel%" 
16.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%a~">>"%log_temp%" 
17.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%b~">>"%log_temp%" 
18.
19.
		for /f "usebackq tokens=1* delims=:" %%c in ('%%N') do ( 
20.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%c~">>"%sammel%" 
21.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%d~">>"%sammel%" 
22.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%c~">>"%log_temp%" 
23.
			findstr /c:"%%C~%%D" "%log%">nul || echo|set /p ="%%d~">>"%log_temp%" 
24.
25.
		findstr /c:"%%C~%%D" "%log%">nul || echo %%O~%%P %%Q %%R %%S %%T %%U %%V %%W %%X %%Y %%Z>>"%sammel%"	 
26.
		findstr /c:"%%C~%%D" "%log%">nul || echo %%O~%%P %%Q %%R %%S %%T %%U %%V %%W %%X %%Y %%Z>>"%log_temp%"	 
27.
		findstr /c:"%%C~%%D" "%log%">nul || type "%log_temp%">>"%log%" 
28.
		if exist "%log_temp%" ( 
29.
			del "%log_temp%"  
30.
31.
		echo %%C~%%D 
32.
33.
 
34.
)
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch - Ein logfile auf änderungen prüfen und in den letzten Zeilen nach MEHREREN BESTIMMTEN einträgen suchen?
Frage von AnomalyxBatch & Shell6 Kommentare

Hallo, Ich benötige eine Abfrage die überprüft ob die Datei workshop_log.txt sich verändert hat. Falls das Logfile sich verändert ...

Batch & Shell
Mittels Batch jede Zeile einer Textdatei prüfen
gelöst Frage von Peter32Batch & Shell4 Kommentare

Hallo, ich habe eine Textdatei (Projekte.txt), die etwa so aufgebaut ist Nun möchte ich gerne, dass ein Batch-Script jede ...

VB for Applications
VbScript: Textdatei nach Suchbegriff nur die nächsten drei Zeilen ausgeben
gelöst Frage von Host-essVB for Applications10 Kommentare

Moin, Moin, ich bin neu hier im Forum und auch Neuling was Vbscript betrifft. Vielleicht kann mir ja jemand ...

JavaScript
PHP Datei im Hintergrund durchlaufen
Frage von miichiii9JavaScript2 Kommentare

Hallo Miteinander Ich möchte gerne eine Aktualisierungsfunktion auf meiner Seite erstellen. Die aktuelle Seite im Browser ist "index.php" wenn ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 42 MinutenViren und Trojaner

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 4 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell8 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...