mc-doubleyou
Goto Top

Finde NICHT in .txt und gib diese Zeile aus

Hallo,

batchscripten macht zwar Spaß aber die Skripte immer was sie wollen und nicht was ich ^^

Ich würde ein Skript benötigen das nichts anderes macht als eine txt nach "NICHT zu durchsuchen und betroffene Zeilen auszugeben. Mit den bisherigen Skripten die ich gefunden habe hab ich es geschafft das er mir eine Meldung ausgibt wenn er kein NICHT gefunden hat das ist aber genau falsch denn wenn das der Fall ist sollte er die Batch selbst schließend und niemanden damit belästigen.

Im Detail geht es darum das ich eine Liste PCs anpinge und dann das Ergebnis in eine TXT schreiben lasse sollte er ein NICHT finden (steht für NICHT online) dann soll das Batch Fenster offen bleiben und mir zeigen, da ist was nicht OK am besten eben die Zeile so das ich weiß was ist nicht OK

Danke schon mal

LG MCD

Content-Key: 135406

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

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

Member: laster
laster Feb 08, 2010 at 08:37:24 (UTC)
Goto Top
Hallo MCD,

...
find /I "NICHT" pinfliste.txt   
if %errorlevel%==0 pause
...

so ähnlich sollte doch alles möglich sein (gibt es schon viele Hinweise im Forum).

vG LS
Member: mc-doubleyou
mc-doubleyou Feb 08, 2010 at 09:16:21 (UTC)
Goto Top
@laster

danke, aber da ich schon ein Gerüst habe nutzt mir das wenig

So sieht das Ganze derzeit aus, natürlich sind die Angaben verfälscht

@echo off 

rem ###Lala#### 
ping /n 1 xxx.xxx.xxx.xxx > nul 
if errorlevel 1 goto nichtda1 
echo "Lala - ONLINE!" > webcamreport_%date%_%time:~0,2%-00.txt   
goto end1 
:nichtda1 
echo "Lala - NICHT online!"  > webcamreport_%date%_%time:~0,2%-00.txt   
:end1 

rem ###Tralala#### 
ping /n 1 xxx.xxx.xxx.xxx > nul 
if errorlevel 1 goto nichtda2 
echo "Tralala - ONLINE!" >> webcamreport_%date%_%time:~0,2%-00.txt   
goto end2 
:nichtda2 
echo "Tralala - NICHT online!" >> webcamreport_%date%_%time:~0,2%-00.txt   
:end2 

rem ###Tütü#### 
ping /n 1 xxx.xxx.xxx.xxx > nul 
if errorlevel 1 goto nichtda3 
echo "Tütü - ONLINE!" >> webcamreport_%date%_%time:~0,2%-00.txt   
goto ausgabe 
:nichtda3 
echo "Tütü - NICHT online!" >> webcamreport_%date%_%time:~0,2%-00.txt   
:ausgabe 


rem ########################## 

for /f "Tokens=*" %%i in ('find /I "NICHT" C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt^') do @set T=%%i   
If "%T%" EQU "NICHT" goto :Exit   

goto :end 

:Exit 
Echo. 
Echo Mindestens eine Webcam ist offline! 
Echo. 
Pause 
exit 


rem ########################## 
:end

Das gibt aber leider nicht das echo aus wenn ein nicht ist sondern wenn kein nicht ist. Zweitens wäre es schöner wenn ich die gesamte Zeile augegeben bekommen würde in der ein nicht ist.

LG MCD
Member: Biber
Biber Feb 08, 2010 at 11:22:43 (UTC)
Goto Top
Moin mc-doubleyou,

ich weiß nicht, was du willst... der batch macht doch alles, was du verlangst.
Works as designed, wie wir Biber sagen. face-wink

Eins der sprachlichen Missverständnisse zwischen dir und dem CMD-Interpreter in der FOR-Konstruktion ist die Zuweisung an die Variable %T%.
kann nicht klappen. Beispiel am CMD-Prompt:
>for /f "tokens=*" %i in ("Tralala - NICHT online!") do @echo SET "T=%i"  
SET "T=Tralala - NICHT online!"  
--> wenn du die Variable %T% auf die ganze Zeile setzt, dann wird der Vergleich [If "%T%" EQU "NICHT" ...] eher selten von Erfolg gekrönt sein.
Mach doch statt der FOR-Konstruktion lieber "nur" ein Find/Findstr mit Abfrage des Errorlevels
....
find /I "NICHT" C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt && goto :ExitWebcamOffline  
Goto :end 
REM [Hier ginge auch ein "goto :eof" ohne Definition der Marke :eof]  

Grüße
Biber
Member: pxxsxx
pxxsxx Feb 08, 2010 at 11:46:08 (UTC)
Goto Top
Tach,
mal ne blöde Frage: Du durchsuchst nur eine Datei... oder schnall ich grad was ned... kann auch sein.

find /I "NICHT" C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt  
If errorlevel == 0 goto exit 

oder auch

type C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt | find /I "NICHT"   
If errorlevel == 0 goto exit 

Gruß
Peter
Member: mc-doubleyou
mc-doubleyou Feb 08, 2010 at 12:36:13 (UTC)
Goto Top
@ biber

Erstmal danke, dein Skript arbeitet zwar aber leider immer noch verkehrt. Ich bekomme nur dann eine Meldung wenn alles OK ist und genau das will ich eben nicht sondern ich will eine Meldung wenn er ein NICHT findet. Achja da du eh einer der Skripter hier bist kannst vl auch schreiben wie ich die gesamte betroffene Zeile ausgeben kann?

LG MCD
Member: mc-doubleyou
mc-doubleyou Feb 08, 2010 at 12:49:19 (UTC)
Goto Top
@pxxsxx

Der Ansatz ist nett zumal schön kurz aber irgendwo muss ein pause rein weil ich sonst ja den Dateiinhalt nicht sehe auch wenn nicht gefunden wurde.

€dit: hab raus gefunden wo das pause hinkommen muss - thx
Member: pxxsxx
pxxsxx Feb 08, 2010 at 12:56:42 (UTC)
Goto Top
OK, dann eben so:

type C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt | find /I "NICHT"   
If %errorlevel% == 0 goto exit 

goto :eof 

:Exit 
Echo. 
Echo Mindestens eine Webcam ist offline! 
Echo. 
Pause 
exit 

So hast du alle Zeilen mit "NICHT" angezeigt und anhand der errorlevel-Abfrage bekommst du zusätzlich die Nachricht "Mindestens eine Webc...."

face-wink
Member: Biber
Biber Feb 08, 2010 at 13:05:21 (UTC)
Goto Top
@pxxsxx

Kleine Schönheitskorrektur bei der ERRORLEVEL-Überprüfung:
Entweder
If %errorlevel% == 0 goto :exit
[Also auf die %variable% prüfen mit der Syntax, die bei jeder %variable% gültig ist. Und dann wird EXAKT auf 0 verglichen]
-oder-
If NOT errorlevel 1 goto :exit
[ explizit mit der IF-Erweiterung "IF NOT ERRORLEVEL 1" --> wenn nicht ERRORLEVEL 1 oder höher, dann ist es 0]

So wie es oben steht ist es unzulässig gemischt [If errorlevel == 0 goto exit]

@mc-doubleyou
Dir werden alle Komplettzeilen angezeigt, die Find/FindStr durchlassen, weil sie ein "NICHT" enthalten.
Auch ohne FOR-Geraffel.

Grüße
Biber
Member: pxxsxx
pxxsxx Feb 08, 2010 at 13:10:16 (UTC)
Goto Top
Sorry,
Fehler meinerseits... wurde ausgebessert.

Gruß
Peter
Member: mc-doubleyou
mc-doubleyou Feb 08, 2010 at 13:15:59 (UTC)
Goto Top
Danke,

mit dem letzen Post bisschen anpassen läuft es nun perfekt.
Member: pxxsxx
pxxsxx Feb 08, 2010 at 13:19:31 (UTC)
Goto Top
Bitteschön, gern geschehen.

Immer dran denken:
Ziel ist Effizienz, das heißt so viel wie nötig, so wenig wie möglich. (oder auch KISS-Prinzip) face-wink

Gruß
Peter
Member: mc-doubleyou
mc-doubleyou Feb 09, 2010 at 08:14:18 (UTC)
Goto Top
ne kleinigkeit noch zu meinem ping skript oben das funktioniert erst nach 10 uhr gut ansonsten muss man das stunden format anpassen.
Member: Biber
Biber Feb 09, 2010 at 08:53:20 (UTC)
Goto Top
Moin mc-doubleyou,

..skript oben das funktioniert erst nach 10 uhr
So etwas ist kein gültiger Abschlusskommentar im Bereich "Batch & Shell" face-wink

Es scheitert ja daran, dass ohne Umformatierung der Stunden ein "Leerzeichen im Dateinamen" der Logdatei wäre.
Das ließe sich natürlich abfagen, wenn der Logdateiname in Anführungszeichen wäre... aber der Name sieht ja dennoch Shice aus.

Und eine Umformatierung der Stunden ist ja auch kein Hexenwerk... der Dateiname braucht ja nur einmal aus der Uhrzeit %time% ermittelt werden.
Falls die %time% also " 9:37:23,22" geschlagen hätte und daraus für die Stundenanzeige im namen ein "09" werden soll.
>set "myhh=1%time:~0,2%"  
## Jetzt wäre myhh=[1 9] bei einstelligen Stunden oder z.b. [114] bei zweistelligen Stunden wie 14h irgendwas

>set "myhh=%myhh: =0%"  
## jetzt ersetze ich etwaige Leerzeichen durch Ziffer 0 -->[1 9] wird zu [109]; [114] bleibt unverändert

>set "myhh=%myhh:~-2%"  
## und von der 109 oder 114 schneide ich mir jeweils die letzen beiden Ziffern ab.
> Set myhh
myhh=09

--> im Batch wird dann eimal am Anfang der Logdateiname gebildet
....
Set "myHH=... wie oben"
Set "Logname=webcamreport_%date%_%myhh%.txt  "
....
....
echo "Lala - ONLINE!" >%logname%


Grüße
Biber
Member: mc-doubleyou
mc-doubleyou Feb 09, 2010 at 15:21:26 (UTC)
Goto Top
oder so:

set hour=%time:~0,2%
if %hour% LSS 10 set hour=0%time:~1,1%

MCD