42687
Goto Top

Seitenzahl aus Drucker.log auslesen

Hallo, ich habe hier aus dem Forum eine vbs, die aus dem Ereignisanzeige alle Druckergebnisse ausliest und in eine Datei schreibt. Hier mal die VBS:

strFile = "C:\PrintEvents.log"
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colLoggedEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent Where Logfile = 'System' and " _
& "EventCode = '10'")

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(strFile)
objFile.WriteLine "Time:" & vbTab & vbTab & vbTab & vbTab & "Computer:" & vbTab & "User:" & vbTab & vbTab & vbTab & vbTab & "Message:"

For Each objEvent in colLoggedEvents
objFile.WriteLine objEvent.TimeWritten & vbTab & objEvent.ComputerName & vbTab & vbTab & objEvent.User & vbTab & vbTab & objEvent.Message


Next
objFile.Close

Aus dieser Datei soll nun ausgelesen werden, wieviele Seiten gedruckt wurden und auf 2 Drucker verteilt.
Hier mal ein Ausschnitt aus der printevents.log:

Time: Computer: User: Message:
20081107184042.000000+060 PETER PETER\...... Dokument 2, ........... in... im Besitz von ..... wurde über Anschluss USB001 auf EPSON Stylus DX3800 Series gedruckt. Größe in Bytes: 18236; Seiten gedruckt: 2

;
20081102110050.000000+060 PETER PETER\...... Dokument 2, ............. im Besitz von ....... wurde über Anschluss USB001 auf EPSON Stylus DX3800 Series gedruckt. Größe in Bytes: 38532; Seiten gedruckt: 1

daraus soll dann wieder 2 Dateien geschrieben werden, einmal der Farblaser soll in die Farblaser.txt und in die sw-drucker.txt in der datei soll dann nur untereinander stehen, wieviele Seiten auf diesem Drucker gedruckt wurden. BSP.
1
4
2
1
1
2

Ich hab schonmal was vorbereitet:
set file="C:\PrintEvents.log"
for /f "delims" %%a in ('find " Seiten gedruckt: " %file%') do echo %%a>>C:\seiten.txt
Es fehlt noch die unterscheidung in die drucker und das immmer zu viel ausgelesen wird. Ich hoffe ihr könnt mir helfen. bb Peter

Content-Key: 101368

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: bastla
bastla Nov 08, 2008 at 23:03:08 (UTC)
Goto Top
Hallo Peter161!

Versuch es damit:
@echo off & setlocal
set "file=C:\PrintEvents.log"  

set "p1=EPSON Stylus DX3800"  
set "f1=Farblaser.txt"  

set "p2=SW-Drucker-Name"  
set "f2=sw-drucker.txt"  

if exist "%f1%" del "%f1%"  
if exist "%f2%" del "%f2%"  
for /f "tokens=3 delims=:" %%a in ('findstr /i /c:"%p1%" "%file%"') do >>"%f1%" echo %%a  
for /f "tokens=3 delims=:" %%a in ('findstr /i /c:"%p2%" "%file%"') do >>"%f2%" echo %%a  
Grüße
bastla

[Edit] Fehlende Anführungszeichen nach %f1% bzw %f2% ergänzt. [/Edit]
Mitglied: 42687
42687 Nov 08, 2008 at 23:16:20 (UTC)
Goto Top
Ich danke, dir schonmal, doch leider kommt bei den beiden For-Zeilen das %%a an dieser Stelle syntaktisch nicht verarbeitbar ist. Ich hoffe du kannst mir helfen. Kannst du mir sagen was dann in der Textdatei steht? Eigendlich sollen da ja nur die Seitenzahlen untereinander stehen. bb Peter
Member: bastla
bastla Nov 08, 2008 at 23:20:28 (UTC)
Goto Top
Hallo Peter161!

Mit den eben oben zusätzlich gesetzten Anführungszeichen sollte das dann doch noch was werden mit den Seitenzahlen ...

Grüße
bastla
Mitglied: 42687
42687 Nov 08, 2008 at 23:42:20 (UTC)
Goto Top
jo, ich danke, dir, ich wunder mich jetz nur das in der 3. zeile auf einmal schon ein paar zeichen eher eingefügt werden. ich schick dir mal den inhalt der kompletten datei als link per pn. danke peter
Member: bastla
bastla Nov 09, 2008 at 00:07:37 (UTC)
Goto Top
Hallo Peter161!

Auf Basis der beiden Beispielzeilen hatte ich die Trennung anhand der enthaltenen ":" vorgenommen - wenn natürlich zusätzliche ":" (wie in einer Pfadangabe) dazwischen kommen, kann das Ergebnis nicht passen ...

Plan B sieht nun so aus:
@echo off & setlocal
set "file=C:\PrintEvents.log"  

set "p1=Farblaser"  
set "f1=Farblaser.txt"  

set "p2=A3-SW-Drucker"  
set "f2=sw-drucker.txt"  

if exist "%f1%" del "%f1%"  
if exist "%f2%" del "%f2%"  
for /f "delims=" %%a in ('findstr /i /c:"%p1%" "%file%"') do set "Line=%%a" & call :ProcessLine "%f1%"  
for /f "delims=" %%a in ('findstr /i /c:"%p2%" "%file%"') do set "Line=%%a" & call :ProcessLine "%f2%"  
goto :eof

:ProcessLine
for /f "tokens=2" %%i in ("%Line:~-10%") do >>%1 echo %%i  
Hier werden nur die letzten 10 Zeichen der Zeile verwendet, und die Aufteilung erfolgt anhand des Leerzeichens vor der Seitenzahl.

Grüße
bastla
Mitglied: 42687
42687 Nov 09, 2008 at 08:50:32 (UTC)
Goto Top
Herzlichen dank, das hätte ich ni so hinbekommen. Es ist mir unbegreiflich wie du das so gut machst. Aber kannst du mir jetzt auch noch sagen wie ich diese Werte per batch nach open office calc importiere und am ende mit Autosumme den gesamtwert ausrechnet.? Ich bin dir schonmal unendlich dankbar. bb michel
Member: bastla
bastla Nov 09, 2008 at 20:35:10 (UTC)
Goto Top
Hallo Peter161!

Aber kannst du mir jetzt auch noch sagen wie ich diese Werte per batch nach open office calc importiere und am ende mit Autosumme den gesamtwert ausrechnet.?
Falls es vollautomatisch (also inkl. Autosumme) sein soll, wäre das einen neuen Thread wert ...

... ansonsten könnte ein Speichern mit dem Typ ".csv" und anschließender Aufruf der Datei(en) mit Calc für den Import sorgen - die Summe müsste dann manuell ergänzt werden.

Grundsätzlich würde ich zwar ebenfalls eine dynamische Summierung (in Calc) vorziehen, allerdings sollten sich die Seitenzahlen ja eigentlich ohnehin nicht mehr ändern, sodass (zur Not face-wink)die Summe auch im Batch berechnet und (statisch) an das Ende der Liste geschrieben und dann (als CSV-File) in Calc importiert werden könnte.

Grüße
bastla