flauschbobbel
Goto Top

Fehlermeldungen in Logfile ablegen

Hallo Zusammen,

ich brauch mal Eure Hilfe, ich finde meinen Fehler nicht:

Siehe nachfolgenden Skriptausschnitt:
...
	set SName=%~n0
	set LogPath=C:\Log\%SName%
	set RemPrntLog=%LogPath%\%SName%.log
...
::	LOESCHEN
:: 	C:\WINDOWS\LastGood\System32\spool\DRIVERS\W32X86\ricohaficio_sp_4100ne89d\JCUI.EXE
	set "TmpFileToDel=%windir%\LastGood\System32\spool\DRIVERS\W32X86\ricohaficio_sp_4100ne89d\JCUI.EXE"  
	if exist %TmpFileToDel% del %TmpFileToDel% >>%RemPrntLog% 2>>%RemPrntLog% & call :WRITELOG "Loesche: %TmpFileToDel% --- Status: %errorlevel%"  
::	--------------------------------
:: 	C:\WINDOWS\LastGood\System32\spool\DRIVERS\W32X86\ricohaficio_sp_4100ne89d\RIC63I.cnt
	set "TmpFileToDel=%windir%\LastGood\System32\spool\DRIVERS\W32X86\ricohaficio_sp_4100ne89d\RIC63I.cnt"  
	if exist %TmpFileToDel% del %TmpFileToDel% >>%RemPrntLog% 2>>%RemPrntLog% & call :WRITELOG "Loesche: %TmpFileToDel% --- Status: %errorlevel%"  
::	--------------------------------
:: 	C:\WINDOWS\LastGood\System32\spool\DRIVERS\W32X86\ricohaficio_sp_4100ne89d\RIC63I.HLP
	set "TmpFileToDel=%windir%\LastGood\System32\spool\DRIVERS\W32X86\ricohaficio_sp_4100ne89d\RIC63I.HLP"  
	if exist %TmpFileToDel% del %TmpFileToDel% >>%RemPrntLog% 2>>%RemPrntLog% & call :WRITELOG "Loesche: %TmpFileToDel% --- Status: %errorlevel%"  
::	--------------------------------
...
:WRITELOG
::	Schreiben von Logmeldungen
	>> %RemPrntLog% echo %date% %time% - %~1
	goto :eof
...

Das Löschen von Dateien im Abschnitt "LOESCHEN" bringt mir folgende Meldung:

Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.

Hierzu habe ich 2 Fragen:
A) Warum kommen diese Meldungen immer am Bildschirm und nicht in meinem Logfile, dass sich doch angegeben habe? Ich habe doch Standardoutput und Standarderror in das Logfile umgelenkt, oder?

B) Wie kann ich denn herausfinden, welcher Prozess auf diese Datei zugreift? Ich hatte den Spooler vermutet, aber das Stoppen des Spoolers, Löschversuch der Datei und Starten des Spoolers bringt nichts. Das Problem besteht weiterhin.

Könnt Ihr mir weiterhelfen?

Danke und viele Grüße,
Flauschbobbel

Content-ID: 89460

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

Ausgedruckt am: 05.11.2024 um 08:11 Uhr

tacker
tacker 09.06.2008 um 23:18:08 Uhr
Goto Top
salü und guten abend!

bezüglich B) suche ma nach filemon auf sysinternals.com!

grüsse tacker
13100
13100 10.06.2008 um 00:17:15 Uhr
Goto Top
o_O
Flauschbobbel
Flauschbobbel 10.06.2008 um 00:26:27 Uhr
Goto Top
Hallo Angeldust,

habe ich auch schon versucht. Der Interpreter lässt sich nicht überzeugen... face-sad
D.h., das Ergebnis ist das gleiche, es wird am Bildschirm angezeigt, aber nicht ins Logfile geschrieben...

Grüße,
Flauschbobbel
13100
13100 10.06.2008 um 00:38:03 Uhr
Goto Top
o_O
bastla
bastla 10.06.2008 um 12:31:35 Uhr
Goto Top
Hallo Flauschbobbel!

Zu A)
Da beide Ausgaben in die selbe Datei schreiben sollen, musst Du "2>>&1" verwenden:
if exist %TmpFileToDel% del %TmpFileToDel% >>%RemPrntLog% 2>>&1 & call :WRITELOG "Loesche: %TmpFileToDel% --- Status: %errorlevel%"  

Zu B)
Alternative zu tackers Vorschlag: "Unlocker" (kann zusätzlich, was hier zwar nicht relevant, aber generell nützlich ist, in vielen Situationen das Löschen trotzdem ermöglichen)

Grüße
bastla
Flauschbobbel
Flauschbobbel 10.06.2008 um 19:21:02 Uhr
Goto Top
Hallo bastla,

Danke, ich werde es nach Deiner Vorgabe versuchen, dass beide Ausgaben in eine Datei geschrieben werden. Kann ich aber erst morgen testen.

Unlocker:
Gutes Tool. Aber ich kann nichts verwenden was eine grafische Oberfläche hat. Wenn schon müsste das Tool auch im Command-Modus als Skript laufen. Gibt es dazu noch eine "freie" Alternative?

Grüße,
Flauschbobbel
Flauschbobbel
Flauschbobbel 10.06.2008 um 19:35:36 Uhr
Goto Top
Hallo Angeldust,

die DOS-Version die ich einsetze ist:
Microsoft Windows XP [Version 5.1.2600]

Zu Deinem Vorschlag eine Variable/Konstante zu verwenden:
set "TmpFileToDel=%windir%\LastGood\System32\spool\DRIVERS\W32X86\ricohaficio_sp_4100ne89d\JCUI.EXE"  
if exist %TmpFileToDel% del %TmpFileToDel% >>%RemPrntLog% 2>>%RemPrntLog% & call :WRITELOG "Loesche: %TmpFileToDel% --- Status: %errorlevel%"  
Das mache ich doch. Ich setzte eine Variable. Was meinst Du genau?

Ich habe auch noch die Variante versucht:
set "TmpFileToDel=%windir%\LastGood\System32\spool\DRIVERS\W32X86\ricohaficio_sp_4100ne89d\JCUI.EXE"  
if exist %TmpFileToDel% (
del %TmpFileToDel% >>%RemPrntLog% 2>>&1 &
call :WRITELOG "Loesche: %TmpFileToDel% --- Status: %errorlevel%"  
)
Ich habe hier im Forum in einem Thread oder Anleitung (weiß leider nicht mehr genau wo und wie der Link heißt) gelesen, dass ich STDOUT (1) und STDERR (2) in eine Datei umlenken kann.
Das habe ich damit versucht. Mit dem Unterprogramm WRITELOG schreibe ich das Ganze in das Logfile. Hatte noch einen Fehler drin, auf den mich dankenswerterweise bastla aufmerksam gemacht hat.

Grüße,
Flauschbobbel
bastla
bastla 10.06.2008 um 19:48:40 Uhr
Goto Top
Hallo Flauschbobbel!

"Unlocker" war auch nur dafür gedacht, der "blockierenden" Anwendung leichter auf die Spur zu kommen ...

Ansonsten: http://windowsxp.mvps.org/processlock.htm; Download oh.exe

Grüße
bastla
13100
13100 10.06.2008 um 22:53:55 Uhr
Goto Top
dein code sah bei mir dank codetag-formatierung und andzeigefehler einfach nur strange aus.

daher hab ich die formatierung überhaupt gleich mal ignoriert und dank dem scrollen bis zum zeilenende hab ich auch keine zeilennummern mehr gesehen, damit hab ich dann im nachhinein überhaupt nix mehr richtig gesehen, weshalb meine posts zum vergessen sind und von mir vernichtet wurden.