Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Batch: Liste von Rechnern anpingen

Empfohlene Antworten

Veröffentlicht

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??

  • Autor
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??

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"

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

  • Autor

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 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

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)

  • 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

Danke,

Und kennst du auch ein Buch?:confused: :confused: :confused:

  • 1 Monat später...
  • Autor

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???

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.

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

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

  • Autor

Es ging mir eigentlich darum, die Uptime von Systemen zu erfahren, wegen Patchverteilung via NetInstall. Meine Lösung sieht nun so aus:

for /f %%i in (Hosts.txt) do uptime %%i >>RunningSystems.txt

das ganze realisier ich mit der Uptime.exe Microsoft... Trotzdem danke für Eure Hilfe

  • Autor
Die von MS, die einmal monatlich verteilt werden ?

Eigentlich alles an Patchen und ServicePacks, die ein Windowssystem benötigt um sicher zu laufen. Zusätzlich all die Software und deren Updates, die von den meisten unserer Kunden benötigt werden (müssten so ca. 350 Produkte sein).

da heisst du schreibst dann eine Textdatei mit allen PCs, die zur Zeit "an" sind.

Wie wertest du die Datei aus ?

Ich hab damals mal einen Batch geschrieben, der hat nachgesehen ob ein Rechner läuft, und dann direkt den Patch installiert. (per psexec.exe von www.sysinternals.com)

  • 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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.