Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 3695 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Entwicklung
gelöst Get ip from external txt file and use in vbscript (5)

Frage von thankusomuch zum Thema Entwicklung ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...