Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Finde NICHT in .txt und gib diese Zeile aus

Frage Entwicklung Batch & Shell

Mitglied: mc-doubleyou

mc-doubleyou (Level 2) - Jetzt verbinden

08.02.2010 um 09:32 Uhr, 3722 Aufrufe, 14 Kommentare

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
Mitglied: laster
08.02.2010 um 09:37 Uhr
Hallo MCD,

01.
... 
02.
find /I "NICHT" pinfliste.txt  
03.
if %errorlevel%==0 pause 
04.
...
so ähnlich sollte doch alles möglich sein (gibt es schon viele Hinweise im Forum).

vG LS
Bitte warten ..
Mitglied: mc-doubleyou
08.02.2010 um 10:16 Uhr
@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

01.
@echo off  
02.
 
03.
rem ###Lala####  
04.
ping /n 1 xxx.xxx.xxx.xxx > nul  
05.
if errorlevel 1 goto nichtda1  
06.
echo "Lala - ONLINE!" > webcamreport_%date%_%time:~0,2%-00.txt  
07.
goto end1  
08.
:nichtda1  
09.
echo "Lala - NICHT online!"  > webcamreport_%date%_%time:~0,2%-00.txt  
10.
:end1  
11.
 
12.
rem ###Tralala####  
13.
ping /n 1 xxx.xxx.xxx.xxx > nul  
14.
if errorlevel 1 goto nichtda2  
15.
echo "Tralala - ONLINE!" >> webcamreport_%date%_%time:~0,2%-00.txt  
16.
goto end2  
17.
:nichtda2  
18.
echo "Tralala - NICHT online!" >> webcamreport_%date%_%time:~0,2%-00.txt  
19.
:end2  
20.
 
21.
rem ###Tütü####  
22.
ping /n 1 xxx.xxx.xxx.xxx > nul  
23.
if errorlevel 1 goto nichtda3  
24.
echo "Tütü - ONLINE!" >> webcamreport_%date%_%time:~0,2%-00.txt  
25.
goto ausgabe  
26.
:nichtda3  
27.
echo "Tütü - NICHT online!" >> webcamreport_%date%_%time:~0,2%-00.txt  
28.
:ausgabe  
29.
 
30.
 
31.
rem ##########################  
32.
 
33.
for /f "Tokens=*" %%i in ('find /I "NICHT" C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt^') do @set T=%%i  
34.
If "%T%" EQU "NICHT" goto :Exit  
35.
 
36.
goto :end  
37.
 
38.
:Exit  
39.
Echo.  
40.
Echo Mindestens eine Webcam ist offline!  
41.
Echo.  
42.
Pause  
43.
exit  
44.
 
45.
 
46.
rem ##########################  
47.
: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
Bitte warten ..
Mitglied: Biber
08.02.2010 um 12:22 Uhr
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:
01.
>for /f "tokens=*" %i in ("Tralala - NICHT online!") do @echo SET "T=%i" 
02.
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
01.
.... 
02.
find /I "NICHT" C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt && goto :ExitWebcamOffline 
03.
Goto :end  
04.
REM [Hier ginge auch ein "goto :eof" ohne Definition der Marke :eof]
Grüße
Biber
Bitte warten ..
Mitglied: pxxsxx
08.02.2010 um 12:46 Uhr
Tach,
mal ne blöde Frage: Du durchsuchst nur eine Datei... oder schnall ich grad was ned... kann auch sein.

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

01.
type C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt | find /I "NICHT"  
02.
If errorlevel == 0 goto exit 
Gruß
Peter
Bitte warten ..
Mitglied: mc-doubleyou
08.02.2010 um 13:36 Uhr
@ 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
Bitte warten ..
Mitglied: mc-doubleyou
08.02.2010 um 13:49 Uhr
@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
Bitte warten ..
Mitglied: pxxsxx
08.02.2010 um 13:56 Uhr
OK, dann eben so:

01.
type C:\Benutzer\lrrthcw\Desktop\WebcamDa\webcamreport_%date%_%time:~0,2%-00.txt | find /I "NICHT"  
02.
If %errorlevel% == 0 goto exit  
03.
 
04.
goto :eof  
05.
 
06.
:Exit  
07.
Echo.  
08.
Echo Mindestens eine Webcam ist offline!  
09.
Echo.  
10.
Pause  
11.
exit  
12.
 
So hast du alle Zeilen mit "NICHT" angezeigt und anhand der errorlevel-Abfrage bekommst du zusätzlich die Nachricht "Mindestens eine Webc...."

Bitte warten ..
Mitglied: Biber
08.02.2010 um 14:05 Uhr
@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
Bitte warten ..
Mitglied: pxxsxx
08.02.2010 um 14:10 Uhr
Sorry,
Fehler meinerseits... wurde ausgebessert.

Gruß
Peter
Bitte warten ..
Mitglied: mc-doubleyou
08.02.2010 um 14:15 Uhr
Danke,

mit dem letzen Post bisschen anpassen läuft es nun perfekt.
Bitte warten ..
Mitglied: pxxsxx
08.02.2010 um 14:19 Uhr
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)

Gruß
Peter
Bitte warten ..
Mitglied: mc-doubleyou
09.02.2010 um 09:14 Uhr
ne kleinigkeit noch zu meinem ping skript oben das funktioniert erst nach 10 uhr gut ansonsten muss man das stunden format anpassen.
Bitte warten ..
Mitglied: Biber
09.02.2010 um 09:53 Uhr
Moin mc-doubleyou,

..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.
01.
 
02.
>set "myhh=1%time:~0,2%" 
03.
## Jetzt wäre myhh=[1 9] bei einstelligen Stunden oder z.b. [114] bei zweistelligen Stunden wie 14h irgendwas 
04.
 
05.
>set "myhh=%myhh: =0%" 
06.
## jetzt ersetze ich etwaige Leerzeichen durch Ziffer 0 -->[1 9] wird zu [109]; [114] bleibt unverändert 
07.
 
08.
>set "myhh=%myhh:~-2%" 
09.
## und von der 109 oder 114 schneide ich mir jeweils die letzen beiden Ziffern ab. 
10.
> Set myhh 
11.
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
Bitte warten ..
Mitglied: mc-doubleyou
09.02.2010 um 16:21 Uhr
oder so:

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

MCD
Bitte warten ..
Ähnliche Inhalte
PHP
gelöst TXT Datei auslesen und bestimmte Zeilen in Variable setzen (11)

Frage von 126594 zum Thema PHP ...

Batch & Shell
gelöst Batch sucht bestimmten "text" in einer .txt datei und soll dann die Zeile anzeigen (6)

Frage von MedicalAd zum Thema Batch & Shell ...

Batch & Shell
Batsch doppelte Zeile in in Text finden und eine löschen (10)

Frage von GNLen1 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(3)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Heiß diskutierte Inhalte
Netzwerke
Mobile Einwahl IPSec VPN von iPhone iPad T-Mobile zur Pfsense (13)

Frage von Spitzbube zum Thema Netzwerke ...

LAN, WAN, Wireless
Eine Netzwerkdose im Wechsel für zwei unterschiedliche Netze (12)

Frage von kartoffelesser zum Thema LAN, WAN, Wireless ...

Voice over IP
SNOM D765 an LancomR883VAW (10)

Frage von MS6800 zum Thema Voice over IP ...

Windows Netzwerk
Ordner-Freigabe außerhalb der Domäne (9)

Frage von Remsboys zum Thema Windows Netzwerk ...