tim1986
Goto Top

Fehlersuche in Batch

Brauche hilfe ich find den fehler einfach nicht
würd mich sehr freuen wenn mir jemand helfen könnte...

:start 

	FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=08%%b  

	 
	findstr /c:"name1" C:\WINDOWS\system32\LogFiles\IN%cdate%.log  

		IF %ERRORLEVEL% == 0 goto netsend1

	 
	findstr /c:"name2" C:\WINDOWS\system32\LogFiles\IN%cdate%.log  

		IF %ERRORLEVEL% == 0 goto netsend2

	
	findstr /c:"name3" C:\WINDOWS\system32\LogFiles\IN%cdate%.log  

		IF %ERRORLEVEL% == 0 goto netsend3


	findstr /c:"name4" C:\WINDOWS\system32\LogFiles\IN%cdate%.log  

		IF %ERRORLEVEL% == 0 goto netsend4

goto :start


:netsend1

	for /f "tokens=1" %%i in (c:\achtung1.log) do call :netsendall %%i  


		goto :copypaste 

:netsend2

	for /f "tokens=1" %%i in (c:\achtung2.log) do call :netsendall %%i  


		goto :copypaste

:netsend3

	for /f "tokens=1" %%i in (c:\achtung3.log) do call :netsendall %%i  


		goto :copypaste

:netsend4

	for /f "tokens=1" %%i in (c:\achtung4.log) do call :netsendall %%i  


		goto :netsendall

:netsendall

net send * %1

:copypaste

	FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=08%%b  

		findstr "name1" C:\WINDOWS\system32\LogFiles\IN%cdate%.log > C:\zugriffe.log  

	 	 findstr "name2" C:\WINDOWS\system32\LogFiles\IN%cdate%.log > C:\zugriffe.log  

		  findstr "name3" C:\WINDOWS\system32\LogFiles\IN%cdate%.log > C:\zugriffe.log  
		   
		   findstr "name4" C:WINDOWS\system32\LogFiles\IN%cdate%.log > C:\zugriffe.log  

	delete C:\WINDOWS\system32\LogFiles\IN%cdate%.log

		start c:\vpnueberwachung.bat

exit

Content-ID: 92672

Url: https://administrator.de/forum/fehlersuche-in-batch-92672.html

Ausgedruckt am: 27.12.2024 um 19:12 Uhr

Nailara
Nailara 22.07.2008 um 22:44:43 Uhr
Goto Top
Hi,

was kommt denn dabei raus?

Grüße
tim1986
tim1986 22.07.2008 um 22:46:44 Uhr
Goto Top
die batch löscht die datei nicht wie hier geschrieben
del C:\WINDOWS\system32\LogFiles\IN%cdate%.log
dadurch verfängt sich die batch in ner endlosschleife...

ich bekomme die fehlermeldung das die datei von einem anderen prozess geöffnet wurde
67369
67369 22.07.2008 um 22:53:00 Uhr
Goto Top
1. Zwischen Befehl/Programm und Parameter gehört normalerweise ein Leerzeichen.
2. date /t kannst du ersetzen durch %date%
3. was soll 08%%b ergeben? Wenn du ein normal formatiertes in DE übliches Datum verwendest,
würde dabei 0822.07.08 bzw. 08.22.07.2008 rauskommen.
tim1986
tim1986 22.07.2008 um 22:57:28 Uhr
Goto Top
08%%b ergibt "0807" da windows die log so anlegt das funktioniert auch
date/t funktioniert auch...
Biber
Biber 22.07.2008 um 22:58:13 Uhr
Goto Top
moin tim1986,

ändert sich das Verhalten des Schnipsels, wenn Du
del C:\WINDOWS\system32\LogFiles\IN%cdate%.log
statt wie oben
delete C:\WINDOWS\system32\LogFiles\IN%cdate%.log
... schreibst?

Und wenn Du dem DEL einen Parameter /Y mitgibst, weil Du ein Wildcard-Löschen versuchst?

Und ist es sinnvoll, jedesma, mit " > C:\zugriffe.log " die Datei Zugiffe.log neu zu erzeugen?
Ginge nicht auch ein Anfügen mit ">>"?
Und würde nicht auch ein
FOR /F "tokens=2 delims=/. " %a in ("%date%") do whatever mit %a
reichen?

Grüße
Biber
67369
67369 22.07.2008 um 23:00:02 Uhr
Goto Top
08%%b ergibt "0807"
Stimmt, mein Fehler. Ich habe delims nicht beachtet.
Nailara
Nailara 22.07.2008 um 23:01:45 Uhr
Goto Top
Hm - im Batch sehe ich nicht, dass ein Dienst gestoppt wurde - es könnte also in der Tat sein, dass ein Prozess noch auf die Datei zugreift und daher das Löschen nicht funktioniert.

Kannst Du den Dienst vor Ablauf des Skripts stoppen?

Grüße
Nailara
Nailara 22.07.2008 um 23:03:28 Uhr
Goto Top
@Biber:

Ist irgendwie komisch - in machen Situationen muss es tatsächlich %%a heissen - da reicht ein %a nicht. Warum habe ich noch nicht begriffen, doch MS schreibt das auch so im Technet .... Hm ...

Grüße Mathias
tim1986
tim1986 22.07.2008 um 23:05:31 Uhr
Goto Top
- leider nicht das is mir auch aufgefallen als ich den code reingestellt habe...

- der parameter wird nicht erkannt "del /Y"

- FOR /F "tokens=2 delims=/. " %a in (%date%) do whatever mit %a ist zwar prinziepiel besser aber hilft bei dem prob leider grad nicht

- das mit dem anfügen hab ich irgendwie verrafft^^

also problem besteht noch...
tim1986
tim1986 22.07.2008 um 23:08:53 Uhr
Goto Top
da wüsste ich grad nicht wie ich den dienst stoppen sollte weil das script im hintergrund laufen soll und eine einwahl am vpn server über net send melden soll also "live"
67369
67369 22.07.2008 um 23:13:28 Uhr
Goto Top
Schreib die Ausgabe des del/delete-Befehls doch auch in eine Logdatei, dann siehst du, was dabei rauskommt und warum die nicht gelöscht wird.

%% muss man bei Schleifenvariablen immer einsetzen, wenn sie im Batch verwendet werden, in der Konsole eingegeben gehört da nur ein %-Zeichen hin.
Biber
Biber 22.07.2008 um 23:13:50 Uhr
Goto Top
@Nailara
<OT>

<grins>
ich wollte eher auf die "Tokens=2" statt "tokens=1-5"
und das "%date%" statt 'date /T' hinaus...
Ich mache einen proof-of-concept eher am CMD-Prompt bevor ich mich an so einen Vielzeiler wie oben herantraue...
... wenn ich das überhaupt jemals wagen würde..
DAHER DAS %a statt %%a
</OT>
doch MS schreibt das auch so im Technet...
Ich gebe zur Not sogar M$ Recht, wenn sie es tatsächlich mal haben sollten...

Grüße
Biber
tim1986
tim1986 22.07.2008 um 23:18:51 Uhr
Goto Top
del C:\WINDOWS\system32\LogFiles\IN0807.log > c:\fehler.log

sollte doch richtig sein alerdings bekomme ich so nur die pfad angabe in die log

"C:\WINDOWS\system32\LogFiles\IN0807.log"
tim1986
tim1986 22.07.2008 um 23:25:58 Uhr
Goto Top
es scheint tatsächlich an dem windows dienst zu liegen hab grad versucht sie von hand zu löschen und das geht auch nicht...
kann ich die datei irgendwie leeren ohne das der windows dienst mekkert?
ansonsten würd ich die datei von nem script kopieren lassen und die kopie wür die vpn überwachung nutzen, was aber wie ich finde ne unschöne lösung währe...
Nailara
Nailara 22.07.2008 um 23:28:40 Uhr
Goto Top
Hi,

ist der Dienst kooperativ, dann könnte man schauen, ob man die Datei mit einem C-Programm zum Schreiben öffnet, alles löscht und dann schliesst (unter Unix macht das Logrotate, aber unter Windows .... face-sad ). Ist der Dienst nicht kooperativ, dann wüßte ich keine Möglichkeit....

Grüße
67369
67369 22.07.2008 um 23:35:14 Uhr
Goto Top
Probiere das mal und erzähle, was in der fehler.log steht.

del C:\WINDOWS\system32\LogFiles\IN0807.log > c:\fehler.log 2>&1

Eine Fehlermeldung bekommst du doch sicher, wenn du händisch das Löschen versuchst?
Und die ist streng geheim?
Welcher Dienst?
tim1986
tim1986 22.07.2008 um 23:41:01 Uhr
Goto Top
"Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird."

isn n protokolldienst "ras_protokollierung" welcher genau weiß ich nicht, aber das format wüst ich noch"IAS"
67369
67369 22.07.2008 um 23:45:04 Uhr
Goto Top
Dann stoppe doch den Dienst kurzzeitig, kopiere die Logdatei woanders hin und starten den Dienst wieder, dann greifst du auf die Kopie zu.

Vielleicht kannst du auch mit Unlocker eine kurzzeitige Freigabe des Handles erreichen, ohne STOP und START.
tim1986
tim1986 22.07.2008 um 23:49:17 Uhr
Goto Top
zum kopieren brauche ich den dienst ja nicht zu stoppendas würde auch so gehen aber um das ganze automatisch zu halten müsste ich dann n 2tes script einsetzten, und da ist erstens die fehlerquelle größer und zweitens hätte ich dann noch mehr müll-logs rumfliegen


mal ne doofe frage zwischendurch wie wirkt sich das eigendlich auf den arveitsspeicher aus wenn ne batch ne woche oder n monat durchläuft?

ich hab da immer son bischen angst deswegen auch am ende der befehl die batch neu zu starten und die alte zu beenden...
Nailara
Nailara 22.07.2008 um 23:57:40 Uhr
Goto Top
In einem Batch ist Unlocker nicht so besonders effektiv - gibt es da noch was anderes?
67369
67369 22.07.2008 um 23:57:57 Uhr
Goto Top
Guck dir im Taskmanager an, wie die Auslastung ist und wieviel Speicher verbraten wird.

Ich blick da sowieso nicht durch, was du mit der Batch eigentlich bezweckst, mal ganz abgesehen davon, dass ich das Lesen dieser auseinandergezogenen Texte nicht als besonders übersichtlich ansehe.

Aus den Zeilen

findstr /c:"name1" C:\WINDOWS\system32\LogFiles\IN%cdate%.log
IF %ERRORLEVEL% == 0 goto netsend1

kannst du beispielsweise eine machen:
findstr /c:"name1" C:\WINDOWS\system32\LogFiles\IN%cdate%.log && goto :netsend1
67369
67369 22.07.2008 um 23:58:40 Uhr
Goto Top
Wieso ist der nicht effektiv?

Unlocker Objektname -S
tim1986
tim1986 23.07.2008 um 00:04:46 Uhr
Goto Top
@ BauerHick

also je mehr code du hast um so dankbarer bist du wenn du nicht alles in eine zeile quetscht...

ich könnte das ganze ding auch dicht an dicht zusammen ziehen aber das macht es noch unleserlicher wie ich finde...

aber ich denke das ist jedem selbst überlassen^^

zur funktion ich will damit das ras protokollüberwachen um zu sehen wann sich wer über vpn einwählt und mir eine nachricht per "net send" informieren lassen...
Nailara
Nailara 23.07.2008 um 00:05:16 Uhr
Goto Top
Dieser Unlocker?

http://ccollomb.free.fr/unlocker/

Der wird doch mit der Maus bedient oder deute ich jetzt die Screenshots falsch???? Die Anleitung sagt: "1. Simply right click the folder or file and select Unlocker" .... Mausbedienung im Batch würde ich als schlecht ansehen - kann aber auch am Wetter liegen ....
tim1986
tim1986 23.07.2008 um 00:08:29 Uhr
Goto Top
der unlocker läuft wohl auch auf command line allerdings wird der den protokolldienst killen und denn wieder fnden und starten... naja^^
Nailara
Nailara 23.07.2008 um 00:08:42 Uhr
Goto Top
Könnte Dir das Tool vielleicht helfen?

http://www.microsoft.com/technet/scriptcenter/tools/logparser/default.m ...

Dann brauchst Du möglicherweise nix umkopieren ...
67369
67369 23.07.2008 um 00:08:49 Uhr
Goto Top
Dieser Unlocker?
Genau der.

Unlocker /? schon mal probiert?
67369
67369 23.07.2008 um 00:10:09 Uhr
Goto Top
Jetzt steige ich aus. Das wird heute nichts mehr. face-wink
Nailara
Nailara 23.07.2008 um 00:16:06 Uhr
Goto Top
Nein - nicht probiert weil nicht installiert - erstmal nur den Hinweis in meine Lösungbibliothek aufgenommen und die Webseite überflogen - ein Bild sagt mehr als 1000 Worte.

Erst die FAQ hat den entscheidenden Hinweis enthalten und den habe ich zu spät - nämlich gerade eben erst auf der Suche nach dem richtigen Programm - gelesen. Muss wohl doch am Wetter liegen - ich geh gleich in den Schatten....
67369
67369 23.07.2008 um 00:19:17 Uhr
Goto Top
Das Tool gehört imo auf jeden Rechner, genauso wie die Sysinternals-Suite. face-smile
tim1986
tim1986 23.07.2008 um 00:28:55 Uhr
Goto Top
könnte wohl brauchbar sein aber ich raff das ding irgendwie nichtich muss mich da wohl mal in ner ruhigen woche reinlesen

aber tausend dank für die ausführliche hilfe
tim1986
tim1986 23.07.2008 um 13:22:30 Uhr
Goto Top
kommen wir zum nächsten problem^^ wie kann ich den timestamp der log auslesen und mit der aktuellen zeit vergleichen damit er nur ne kopie macht wenn sich die log verändert hat?
sollte zumindest minutengenau sein...

freue mich auf eure ideen
67369
67369 23.07.2008 um 13:27:13 Uhr
Goto Top
Help FOR. face-smile Da findest du dann unten die Variablen, die dir die Zeitangaben für eine existierende Datei liefern. Die aktuelle Zeit bekommt man mit %time%
HELP SET erklärt dir, wie man die Variablen beackert, also nur bestimmte Stellen verwenden kann.
tim1986
tim1986 23.07.2008 um 13:46:07 Uhr
Goto Top
jo vielen dank so lernt mann immer mal wieder was dazu^^
tim1986
tim1986 23.07.2008 um 16:59:12 Uhr
Goto Top
so, habe fertig^^ hab das prob jetzt wie oben beschrieben mit "unlock lösen können funktioniert auch alles bestens...

wollte mich nochmal bei allen die mir mit rat und tat geholfen haben bedanken

hoffe ich kann mich bei gelegenheit mal revangieren

mfg der tim

ps: hier nochmal der fertige code fals es jemanden interessiert

@echo off


:start

	FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=08%%b  

	 
	findstr /c:"name1" C:\WINDOWS\system32\LogFiles\IN%cdate%.log  

		IF %ERRORLEVEL% == 0 goto netsend1

	 
	findstr /c:"name2" C:\WINDOWS\system32\LogFiles\IN%cdate%.log  

		IF %ERRORLEVEL% == 0 goto netsend2

	
	findstr /c:"name3" C:\WINDOWS\system32\LogFiles\IN%cdate%.log  

		IF %ERRORLEVEL% == 0 goto netsend3


	findstr /c:"name4" C:\WINDOWS\system32\LogFiles\IN%cdate%.log  

		IF %ERRORLEVEL% == 0 goto netsend4

goto :start

:netsend1

	for /f "tokens=1" %%i in (c:\achtung1.log) do call :netsendall %%i  


		goto :copypaste 

:netsend2

	for /f "tokens=1" %%i in (c:\achtung2.log) do call :netsendall %%i  


		goto :copypaste

:netsend3

	for /f "tokens=1" %%i in (c:\achtung3.log) do call :netsendall %%i  


		goto :copypaste

:netsend4

	for /f "tokens=1" %%i in (c:\achtung4.log) do call :netsendall %%i  


		goto :netsendall

:netsendall

	net send * %1

goto :copypaste

:copypaste

	FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=08%%b  

		findstr "name1" C:\WINDOWS\system32\LogFiles\IN%cdate%.log >> C:\zugriffe.log  

		 findstr "name2" C:\WINDOWS\system32\LogFiles\IN%cdate%.log >> C:\zugriffe.log  

		  findstr "name3" C:\WINDOWS\system32\LogFiles\IN%cdate%.log >> C:\zugriffe.log  

		   findstr "name4" C:WINDOWS\system32\LogFiles\IN%cdate%.log >> C:\zugriffe.log		     


		   
	c:\programme\unlocker\unlocker C:\WINDOWS\system32\LogFiles\IN%cdate%.log -S

	 del C:\WINDOWS\system32\LogFiles\IN%cdate%.log

goto :quit

:quit	  

	start /MIN c:\vpnueberwachung.bat

exit