Zum Inhalt springen

Batch: Liste von Rechnern anpingen


Hüsi

Empfohlene Beiträge

Servus,

zur Verwaltung von IP-Adressen bei uns im Segment hab ich eine Liste von Rechnern und möchte diese gern anpingen (schauen, ob der hostname noch aufm dns-Server eingetragen ist).

wie kann ich per batch diese Liste von Hostnames anpingen?

hostname1

hostname2

hostname3

...

jemand ne idee, wie ich das per batch anpacke??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Benutze Tokens dafür.


FOR /F "tokens=*" %%i IN ([Pfad]Hostname.txt) DO ping %%i

Sollte funktionieren, ist aber nicht getestet.

jo das funktioniert. besten dank. nur was da geschieht versteh ich nicht. hab schonmalhier geschaut und mir die hilfe zu "for" angeschaut, aber schlau werd ich da nicht draus. gibts auch ne einfache erklärung, da ich das ganze vielleicht irgendwann nochmal in anderem zusammenhang nutzen kann??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eins vorweg: Die Datei Hostname.txt ist folgendermaßen aufgebaut:

PC1

PC2

PC3

Anstelle von

FOR /F "tokens=*" %%i IN ([Pfad]Hostname.txt) DO ping %%i

geht auch FOR /F %%i IN (Hostname.txt) DO ping %%i

Also der erste teil des Befehl: FOR /F %%i IN (Hostname.txt)

Liest die Einträge in der Datei Hostname.txt einzeln aus, und setzt die Variable %%i mit dem Eintrag in der Hostname.txt

das heisst: aus %%i wird dann bei ersten Durchlauf PC1.

Die nun gesetzte Variable %%i wird dann an den Zeiten Teil des Befehl übergeben:

der zweite Teil ( DO ping %%i) macht dann folgendes: Ping PC1

Et Voila.

-------------------------------

Mit Tokens arbeitest du folgendermaßen:

Die Hostname.txt ist folgendermaßen aufgebaut

PC1 Franz Müller

PC2 Hella Hausfrau

FOR /F "tokens=1,2" %%i IN (Hostname.txt) DO echo %%i echo %%j

DIe erste Variable (%%i) wird mit dem ersten Token (PC1) gesetzt.

Die zweite Variabel (%%j ->wird automatisch erzeugt) wird mit dem zweiten Token (Franz) gesetzt

Das macht dann ein "Echo PC1 Franz"

wenn du den Befehl nun änderst in:

FOR /F "tokens=1,3 " %%i IN (Hostname.txt) DO echo %%i echo %%j

passiert folgendes:

DIe erste Variable (%%i) wird mit dem ersten Token (PC1) gesetzt.

Die zweite Variabel (%%j ->wird automatisch erzeugt) wird mit dem dritten Token (Müller) gesetzt

Das macht dann ein "Echo PC1 Müller"

Link zu diesem Kommentar
Auf anderen Seiten teilen

mit For Schleifen kann man fast alles machen.

Wenn du eine Liste mit z.B. 400 Rechner hast, und nur die haben möchtest,

wo der Computername nicht mehr aufgelöst wird, dann mach mal folgendes:

for /f %%i in (Computernamen.txt) do (ping %%i|find /i "Adresse" >>AdresseUngueltig.txt)

Wenn du einen Computer per Namen (z.B. Rechner1) anpingst, erhälst du als Antwort:

Antwort von 192.168.0.1:Bytes=32 Zeit<10ms TTL=127

Wenn der PC-Name namentechnisch nicht mehr aufgelöst wird (steht nicht mehr im DNS/WINS) dann erhälst du:

Ungültige IP-Adresse Rechner1.

Die For Schleife schreibt dann nur die Rechner in die Datei, wo als Ausgabe beim Ping "Adresse" steht. So ist das ganze übersichtlicher. Aber das nur am Rande

Link zu diesem Kommentar
Auf anderen Seiten teilen

das ist ja sogar noch besser, vielen dank, funktioniert ganz prima!

was ich daran noch nicht verstehe ist: wofür steht das zeichen: "|" in dem script? ich dachte bisher, das ständ für oder aber das passt hier nach meinem empfinden nicht so ganz.

Das | ist ein Pipe - Zeichen, d.h. die Standardausgabe vonping wird automatisch an die Standardeingabe von find weitergeben.

Arbeiten mit Pipes ist gerade unter Linux sehr populär und sehr praktisch.

Gruß

Terran

Link zu diesem Kommentar
Auf anderen Seiten teilen

Noch ein Hinweis:

Wenn du den Befehl "

for /f %%i in (Computernamen.txt) do (ping %%i|find /i "Adresse" >>AdresseUngueltig.txt)" in eine Batchdatei schreibst, brauchst du 2 %-Zeichen.

Falls du den Befehl nicht einer Batch benötigst, sondern an der Eingabeaufforderung, so ist nur ein %-Zeichen notwendig ->

for /f %i in (Computernamen.txt) do (ping %i|find /i "Adresse" >>AdresseUngueltig.txt)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Jahr später...

Hallo,

Ich kenne mich mit Batch überhaupt nicht aus. Ich habe mal irgendwo so ein Befehl gefunden, mit dem ich eine Homepage anpingen konnte.

Ich glaube in der Datei stand irgendwas mit pingto oder so kA.

Bitte helft mir.:confused:

P.S.: Kennt jemand ein Buch über dieses Batch oder Bat? Ich würde mich damit mal gerne auseinander setzen.

MfG

Darkskater

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

for /f %%i in (Computernamen.txt) do (ping %%i|find /i "Adresse" >>AdresseUngueltig.txt)

Das habe ich dann jetzt nochmal aufgegriffen und so umgebastelt:

for /f %%i in (Hosts.txt) do (ping -n 1 %%i|if errorlevel 0 echo %%i >>RunningSystems.txt)

allerings bekomm ich die dann die meldung "echo" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Was ich machen will: Ich hab eine Liste von Hostnames, und möchte die Rechner, die Antworten (errorlevel 0) in die Datei RunningSystems.txt schreiben, was jedoch nicht funktioniert. Jemand ne idee???

Link zu diesem Kommentar
Auf anderen Seiten teilen

das wird so nicht funktionieren,

versuche es mal mit:

for /f %%i in (Hosts.txt) do (ping -n 1 %%i | if %errorlevel%==0 echo %%i >>RunningSystems.txt)

(Das wäre syntaktisch korrekt, funktioniert allerdinsg auch nicht, da nicht der Errorlevel, sondern die Ausgabe von ping per "|" an "if" übergeben wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der MS-Kommandozeileninterpreter kann ja mehr als ich dachte...

Schade nur das MS nicht in der Lage ist vernünftige Manpages oder Hilfeeinträge zu integrieren - das ist für mich nach wie vor ein Ausschlusskriterium...

Da bleib ich bei meiner Bash (zur Not cygwin), eigentlich schon unverschämt von mir die gute alte Bash mit der MS-Shell in einem Post zu nennen ;)

mfg

cane

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, ich habe da ne Batch (Ping.bat), die funktioniert so:


@echo off

cls

Title PING-Abfrage laeuft... - bitte warten...

set host=Clients.txt

for /f %%i in (%host%) do (ping -n 1 %%i | find "Antwort" > nul ) && (@echo %%i = online>>LOG.txt) || (@echo %%i = offline>>Log.txt)

Vielleicht hilft Dir das weiter...

Gruß Inti31

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Jahre später...

Hallo zusammen,

ich bin im Bereich der Batch-Programmierung auch noch ein totaler Anfänger.

Ich habe folgendes Problem:

Ich habe eine Liste mit IP-Adressen (ca. 30), das sind die IP-Adressen von Terminals in unserem Gebäude. Manchmal kommt es vor das die Terminals abstürzen, das bekommt man aber erst mit wenn sie irgendjemand beschwert das es aus ist. Nun dachte ich mir das, wenn alle Terminals sagen wir alle 30 minuten angepingt werden man ja schnell sieht wenn ein Terminal aus ist das man keine antwort bekommt...

das was hier geschrieben wurde hat mich schonmal einen schritt weitergebracht

mit: FOR /F "tokens=*" %%i IN (C:\ipliste.txt) DO ping %%i

kann ich alle Terminals anpingen lassen.. nun weiß ich aber nicht wie ich es schaffe das er mir eine meldung auf den desktop gibt wenn einer mal nicht antwortet.. und wenn diese meldung kommt soll er aber trotzdem weiterhin die restlichen terminals anpingen...

ich hoffe ihr könnt mir weiterhelfen, bin für jede Hilfe dankbar!

MfG

ryoorox

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo ryoorox,

dazu brauchst du 3 Dateien

1. Datei: Liste mit IP-Adressen oder Namen (pro Zeile eine IP)

2. Datei: Startet Pings

3. Datei: Startet Meldungsdialog

Datei 1:


127.0.0.1

www.google.de

www.sollteesnichtgeben.de

Datei 2 (pinger.bat):

@echo off

cls


set host=C:\ipliste.txt

set pingsave=C:\tmp.txt

set meldung=C:\meldung.bat


echo ====================

echo Terminalueberwachung

echo ====================

echo.

echo  Abbruch mit STRG+C

echo.

echo ====================


if exist %pingsave% (

    erase %pingsave%

)


:start


for /f %%i in (%host%) do (

    echo Pinge %%i ...

    ping -n 1 %%i | find /C "Antwort" >> %pingsave%


    if exist %pingsave% (

       for /f %%a in (%pingsave%) do (

          if %%a == 0 (              

             start %meldung% %%i

          ) 

       ) 

       erase %pingsave%

    ) else (

       echo Datei %pingsave% nicht gefunden.

    )   

)


goto start


EXIT

datei 3 (meldung.bat):

@echo off

CLS

color C

echo.

echo Terminal %1 is DOWN!

echo Terminal %1 is DOWN!

echo Terminal %1 is DOWN!

echo.

PAUSE

EXIT

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...