macgarnigle 10 Geschrieben 1. Februar 2005 Melden Geschrieben 1. Februar 2005 Hallo zusammen, gibt es ein Programm (wahrscheinlich eher nicht) oder eine einfache Möglichkeit mit einer Batch Servernamen aus einer Datei auszulesen und diese zu pingen? Bei der Suche in den Beiträgen habe ich schon gefunden dass das mit einer for-Schleife gemacht werden muss, aber genau für diesen Fall hab´ ich nix gefunden. Wenn´s zu aufwändig ist: kann ich mich da irgendwo einlesen? Vielen Dank für eure Antworten Grüsse macgarnigle Zitieren
Finanzamt 76 Geschrieben 1. Februar 2005 Melden Geschrieben 1. Februar 2005 Hallo! Wenn Du die Servernamen sowieso in einer Datei stehen hast, dann lies diese Datei doch einfach [Copy&Paste] in die Batchdatei ein, schreib vor jeden Servernamen ein "#", und ersetze anschließend "#" durch "ping \\" Gegrüßt! Zitieren
macgarnigle 10 Geschrieben 1. Februar 2005 Autor Melden Geschrieben 1. Februar 2005 Danke Finanzamt. Da sich die Servereinträge in der txt-Datei aber immer ändern wäre es recht wenn ich irgendwas in die Befehlszeile eintippen und auf die Textdatei verweisen könnte, primitiv gesagt: "ping fürjedeneintragindatei c:\server.txt" (fürjedeneintragindatei steht für den Befehl den es vermutlich gibt und der die Textdatei nacheinander durchgeht und sich jeden Eintrag nacheinander vornimmt) schöne Grüsse macgarnigle Zitieren
Operator 10 Geschrieben 1. Februar 2005 Melden Geschrieben 1. Februar 2005 Hi, verrat uns doch mal, was Du damit bezwecken willst? Es gibt bestimmt bessere Lösungen zu Deinem Problem. Gruß Andre Zitieren
thorgood 10 Geschrieben 1. Februar 2005 Melden Geschrieben 1. Februar 2005 In einer Batchdatei geht das so: for /f %%i in (c:\server.txt) do ping %%i thorgood Zitieren
macgarnigle 10 Geschrieben 1. Februar 2005 Autor Melden Geschrieben 1. Februar 2005 Hallo, @operator: ich hab´ immer wieder einige server durchzustarten und das sind eigentlich jedesmal andere. die server hab´ ich immer als txt-file vorliegen, weshalb es praktisch wäre wenn ich dieses gleich so irgendwo einbauen könnte dass diese dann alle angepingt werden (ich will halt anschliessend nicht alle händisch pingen, sind meistens über 20 stück). @thorgood: wenn ich das ausführ´ kommt die fehlermeldung: "%%i" ist syntaktisch an dieser Stelle nicht verarbeitbar. Danke für eure Mühe. Zitieren
thorgood 10 Geschrieben 1. Februar 2005 Melden Geschrieben 1. Februar 2005 Direkt in der Eingabeaufforderung ist die Syntax for /f %i in (c:\server.txt) do ping %i %% nur in der *.cmd Datei verwenden. thorgood Zitieren
macgarnigle 10 Geschrieben 2. Februar 2005 Autor Melden Geschrieben 2. Februar 2005 Hallo Thorgood, das klappt! VIELEN DANK (vielleicht der Beginn einer grossen Batch-Karriere ;-)) schöne Grüsse macgarnigle Zitieren
white-horse 10 Geschrieben 1. August 2005 Melden Geschrieben 1. August 2005 Hallo, bei den Thema muss ich mich gleich mal anschließen. Ich hab folgendes Problem Ich möchte mit einer for-Schleife aus einer Textdatei mehrere Parameter durch Semikolon getrennt auslesen. Leider schaff ich es nur max 2 Parameter aus einer Zeile rauszubekommen. Wie schaff ich es 3 und mehrere Werte auszulesen? Hier z.B. eine Textfile Namens server.txt Servername;IP-Adresse;Dienst server1;192.168.1.81;snmp server2;192.168.1.32;wuauserv server3;;wuauserv ...und meine For-Schleife C:\>for /f "skip=1 tokens=1,* delims=;" %1 in (C:\server.txt) do net send client1 s Server: %1 mit IP-Adresse: %2 und Dienst %3 Ausgabe ist : Server: server1 mit IP-Adresse: 192.168.1.81,snmp; und Dienst %3 Ich habs auch schon mit alphabetischen Variabelen versucht. Der verschluckt mir immer den zweiten Semikolon und erkennt den rest als eine Zeichenkette. Da ist doch noch ein Wrum drin.... Danke für Tips Gruß Patrick Zitieren
lefg 276 Geschrieben 1. August 2005 Melden Geschrieben 1. August 2005 Hallo, wenn ich das richtig sehe, enthält der Block eins den Servernamen, der Block zwei durch den Asteriskus den rest der Zeile. Das sollen doch aber wohl Token 2 und 3 sein, oder. Wie ist es denn, wenn Tokens=1-3 angegeben werden? Schliesslich werden ja auch die Parameter %1-%3 verwendet. Was mich in diesem Fall etwas wundert ist die Verwendung von %1-%3. Ich mache es immer mit %i, %j, %k; in Batches mit %%i, %%j, %%k. Gruß Edgar Zitieren
white-horse 10 Geschrieben 1. August 2005 Melden Geschrieben 1. August 2005 Hallo Edgar, vielen Dank! Das war mein Fehler mit Tokens 1-3 gehts. Das Forum ist echt klasse! :jau: :thumb1: Gruß Patrick Zitieren
white-horse 10 Geschrieben 11. August 2005 Melden Geschrieben 11. August 2005 Hallo, jetzt hab ich noch eine Frage zu diesen Thema. Ich hab die FOR-Schleife noch nicht so 100%ig im Griff. Leider konnte ich auch im Netzt keine richtige Lösung für mich finden. Ich will die FOR-Schleife mit einer IF-Schleife kompinieren. Also so in etwa: FOR { IF { .............} } [color=Green]for /f "skip=1 tokens=1,* delims=;" %1 in (C:\server.txt) do [/color][color=Red]net send client1 s Server: %1 mit IP-Adresse: %2 und Dienst %3[/color] Der DO-Teil soll durch folgende IF-Anweisung ersetzt werden. (Link ) [color=Green]for /f "skip=1 tokens=1,* delims=;" %1 in (C:\server.txt) do [color=DarkOrange][size=7]{[/size][/color] [/color][color=Red]netsvc /query \\hostname dienstname | find /i "is not running on host" if not errorlevel 1 goto notrunning netsvc /query \\hostname dienstname | find /i "is running on host" if not errorlevel 1 goto running goto ende :notrunning net send hostname2 "Dienst laeuft nicht mehr !!!!" goto ende :running net send hostname2 "Dienst laeuft noch immer" :ende[/color][color=DarkOrange][size=7]}[/size][/color] Es soll für jeden gefundene Zeile in der FOR-Schleife die IF-Anweisung ausgeführt werden, danach, falls noch Zeilen vorhanden sind, wird die FOR-Schleife weiter ausgeführt. Das sollte doch machbar sein oder? Ich habe schon viel Probiert, aber ich krieg das einfach nicht hin. Mir würde auch ein ganz einfaches Beispiel einer FOR-IF-Schleifenkombination reichen. Muss nicht 100%ig auf mein Problem zugeschnitten sein. Wenn ichs Grundsätzlich weiß obs geht, wenn ja wie, dann komm ich schon dahinter. Danke für Tips. Gruß Patrick Zitieren
lefg 276 Geschrieben 11. August 2005 Melden Geschrieben 11. August 2005 Hallo Patrik, mir scheint ein Problem ist die Klammerung für den DO-Teil. Du darfst keine geschweiften, sondern musst die runden Klammern verwenden. Übrigens, IF ist keine Schleife, es ist der Befehl für eine bedingte Ausführung eines Befehl. Weiter schau dir bitte mal an, wie Code oder Listen in einem Beitrag dargestellt wird. Das Schlüsselwort ist Code. Es wird in rechteckige Klammern gesetzt, das Ende der Codedarstellung wird mit einem Slash zwischen der öffnenden Klammer und dem Schlüsselwort eingeleitet. Viel Erfolg Edgar for /f "skip=1 tokens=1,* delims=;" %1 in (C:\server.txt) do ( netsvc /query \\hostname dienstname | find /i "is not running on host" if not errorlevel 1 goto notrunning netsvc /query \\hostname dienstname | find /i "is running on host" if not errorlevel 1 goto running goto ende :notrunning net send hostname2 "Dienst laeuft nicht mehr !!!!" goto ende :running net send hostname2 "Dienst laeuft noch immer" :ende ) Zitieren
white-horse 10 Geschrieben 11. August 2005 Melden Geschrieben 11. August 2005 Hallo Edgar, danke für die Antwort, hat mir wieder ein Stück weiter geholfen. Ich hab mal wieder getestet. Hier mal mein aktuelles Script: @echo on for /f "skip=1 tokens=1-3,* delims=;" %%e in (C:\server.txt) do ( net send pc030hs "EINS - %%e - %%f - %%g" netsvc /query \\%%e %%g | find /i "is stopped on \\%%e" if not errorlevel 1 goto notrunning netsvc /query \\%%e wuauserv | find /i "is running on \\%%e" if not errorlevel 1 goto running goto ende :notrunning net send pc030hs "Dienst laeuft nicht mehr !!!!" goto ende :running net send pc030hs "Dienst laeuft noch immer" :ende pause sleep 3 ) ..und die Ausgabe von der DOS-Box wenn ich das Script starte: C:\tasks\checkdienste>for /F "skip=1 tokens=1-3,* delims=;" %e in (C:\server.txt ) do ( net send pc030hs "EINS - [color=DarkGreen]%e - %f - %g[/color]" netsvc /query \\[color=DarkGreen]%e %g[/color] | find /i "is stopped on \\[color=DarkGreen]%e[/color]" if not errorlevel 1 goto notrunning netsvc /query \\[color=DarkGreen]%e[/color] wuauserv | find /i "is running on \\[color=DarkGreen]%e[/color]" if not errorlevel 1 goto running goto ende net send pc030hs "Dienst laeuft nicht mehr !!!!" goto ende net send pc030hs "Dienst laeuft noch immer" pause sleep 3 ) C:\tasks\checkdienste>( net send pc030hs "EINS - rsw2 - 172.16.1.32 - wuauserv" netsvc /query \\rsw2 wuauserv | find /i "is stopped on \\rsw2" if not errorlevel 1 goto notrunning netsvc /query \\rsw2 wuauserv | find /i "is running on \\rsw2" if not errorlevel 1 goto running goto ende net send pc030hs "Dienst laeuft nicht mehr !!!!" goto ende net send pc030hs "Dienst laeuft noch immer" pause sleep 3 ) Die Nachricht wurde erfolgreich an PC030HS gesendet. Service is stopped on \\rsw2 C:\tasks\checkdienste>net send pc030hs "Dienst laeuft nicht mehr !!!!" Die Nachricht wurde erfolgreich an PC030HS gesendet. C:\tasks\checkdienste>goto ende C:\tasks\checkdienste>pause Drücken Sie eine beliebige Taste . . . nach dem Tücken der Taste ist das Script aus. Warum werden beim scheinbar ersten Durchlauf keine Variabelen geschrieben, sondern %e usw. (siehe grün) Warum wird nur der erste Server geprüft? In meiner server.txt hab ich 3 Server eingetragen. Irgendwie funktioniert die FOR-Schleife noch nicht so 100%ig. Vielen Dank für Tips. Gruß Patrick PS. Ich glaube jetzt bin ich kurz vorm Ziel ;) Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.