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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135406
Url: https://administrator.de/contentid/135406
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
14 Kommentare
Neuester Kommentar
Moin mc-doubleyou,
ich weiß nicht, was du willst... der batch macht doch alles, was du verlangst.
Works as designed, wie wir Biber sagen.
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:
--> 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
Grüße
Biber
ich weiß nicht, was du willst... der batch macht doch alles, was du verlangst.
Works as designed, wie wir Biber sagen.
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!"
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
Tach,
mal ne blöde Frage: Du durchsuchst nur eine Datei... oder schnall ich grad was ned... kann auch sein.
oder auch
Gruß
Peter
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
OK, dann eben so:
So hast du alle Zeilen mit "NICHT" angezeigt und anhand der errorlevel-Abfrage bekommst du zusätzlich die Nachricht "Mindestens eine Webc...."
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...."
@pxxsxx
Kleine Schönheitskorrektur bei der ERRORLEVEL-Überprüfung:
Entweder
-oder-
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
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
Moin mc-doubleyou,
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.
--> im Batch wird dann eimal am Anfang der Logdateiname gebildet
Grüße
Biber
..skript oben das funktioniert erst nach 10 uhr
So etwas ist kein gültiger Abschlusskommentar im Bereich "Batch & Shell" 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