
6741
29.11.2007, aktualisiert am 03.12.2007
Batch zum Abfragen von Clients. Ist der Client da, dann mache etwas.
Moin...
geht irgendwie nicht ...
gedacht ist, wenn ein Client / IP da ist, dann wird etwas ausgeführt, sprich hier geht zur Kontrolle ein notepad auf. Aber der Loop geht nicht.
Evtl jemand ne Idee???
gruß
geht irgendwie nicht ...
set n=1
:start
ping 192.168.178.%n% -n 1 | findstr "TTL" && goto client_da
%n%+1
goto start
:client_da
start notepad
%n%+1
if %n%=255 then goto end
goto start
:end
Evtl jemand ne Idee???
gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 74849
Url: https://administrator.de/forum/batch-zum-abfragen-von-clients-ist-der-client-da-dann-mache-etwas-74849.html
Ausgedruckt am: 22.04.2025 um 12:04 Uhr
13 Kommentare
Neuester Kommentar
Hallo firewalldevil!
Der "ping" sollte eigentlich funktionieren, die Schleife kann nicht gehen, da für das Erhöhen des Zählers ebenfalls ein "set" erforderlich wäre - entweder:
oder etwas kürzer:
Allerdings würde sich hier auch eine "for"-Schleife anbieten:
Grüße
bastla
Der "ping" sollte eigentlich funktionieren, die Schleife kann nicht gehen, da für das Erhöhen des Zählers ebenfalls ein "set" erforderlich wäre - entweder:
set /a n=%n%+1
set /a n+=1
Allerdings würde sich hier auch eine "for"-Schleife anbieten:
@echo off & setlocal
for /l %%n in (1,1,254) do ping 192.168.178.%%n -n 1 | findstr "TTL" >nul && call :client_da %%n
goto :eof
:client_da
echo Client %1 erreichbar
REM start notepad
Grüße
bastla
Hallo firewalldevil!
... dann könnte es nach einem "for /?" auch richtig zugeordnet werden.
Mit dem Schalter "/L" wird eine Zählschleife (hier: Zähle von 1 mit der Schrittweite 1 bis 254 mit der Schleifenvariable %%n) erzeugt.
Grüße
bastla
Warum setzt du ein setlocal?
Gewohnheitsmäßig; damit wird sichergestellt, dass ev in diesem Batch erzeugte Variablen mit dem Ende des Batches auch wieder verschwinden - da es hier (noch) keine derartigen Variablen gibt, ist das "setlocal" allerdings nicht erforderlich. Da aber beim Ende des Batches ohnehin automatisch ein "endlocal" ausgeführt wird, sollte meines Wissens das "setlocal" keine unerwünschten Nebenwirkungen haben.Wofür steht die "for /1 %%n in (1,1,254)"?
Ich sollte mir angewöhnen, das "l" groß ("L") zu schreiben ...... dann könnte es nach einem "for /?" auch richtig zugeordnet werden.
Mit dem Schalter "/L" wird eine Zählschleife (hier: Zähle von 1 mit der Schrittweite 1 bis 254 mit der Schleifenvariable %%n) erzeugt.
Grüße
bastla
Hallo firewalldevil!

Abgesehen davon zeigt Deine Frage, dass Du beim Lesen der Onlinehilfe (hatte ich "for /?" erwähnt) noch nicht wirklich weit gekommen bist ...
Grüße
bastla
warum setzt du die Variable in %%n?
Du wolltest ja auch "n" verwenden, also bin ich dabei geblieben - und dass Laufvariable in einem Batch mit doppelten Prozentzeichen geschrieben werden, haben wir den Programmierern bei MS zu verdanken. Abgesehen davon zeigt Deine Frage, dass Du beim Lesen der Onlinehilfe (hatte ich "for /?" erwähnt) noch nicht wirklich weit gekommen bist ...
Grüße
bastla
Moin fwd,
mal sehen, ob ich diesmal schneller bin als bastla...
Wenn Du in der FOR-Anweisung die Zählvariable %%n verwendest, ist diese nur während der Laufzeit der FOR-Anweisung existent und nur innerhalb dieser Codezeile.
Wenn Du aus der FOR-Anweisung jeweils noch einen anderen Code-Block (":client_da") oder einen anderen Batch aufrufst, kennt dieser diese Zählvariable %%n nicht.
Du übergibst dem ":client_da"-Block nur den Wert von %%n (meinetwegen 1 oder 23...), und dieser Wert kommt als Parameter 1 == erster Parameter == %1 in ":Client_da" an.
Also musst Du dort schreiben:
Dann klappt es.
Grüße
Biber
mal sehen, ob ich diesmal schneller bin als bastla...
Wenn Du in der FOR-Anweisung die Zählvariable %%n verwendest, ist diese nur während der Laufzeit der FOR-Anweisung existent und nur innerhalb dieser Codezeile.
Wenn Du aus der FOR-Anweisung jeweils noch einen anderen Code-Block (":client_da") oder einen anderen Batch aufrufst, kennt dieser diese Zählvariable %%n nicht.
Du übergibst dem ":client_da"-Block nur den Wert von %%n (meinetwegen 1 oder 23...), und dieser Wert kommt als Parameter 1 == erster Parameter == %1 in ":Client_da" an.
Also musst Du dort schreiben:
:client_da
mbsacli /target 192.168.178.%1 /catalog c:\mbsa\wsusscn2.cab > c:\mbsa\result.txt
Dann klappt es.
Grüße
Biber
Moin fwd,
lass mal kurz die Variable %%n außen vor.
Wenn Du irgendwo in Deinem Batch diesen ":Client_da"-Block CALLst mit...
dann kommen "unten" aus Sicht des geCALLten Blocks ":Client_da" drei Parameter an...
Wenn Du ihn rufst mit "call :client_da Hallo, jemand zu Hause?
Und wenn Du den Block CALLst mit "call :client_da %%n" und %%n ist ein Schleifenwert von 1 bis 255...
Dann kommt nacheinander die 1, die 2, die 3....die 255 als erster Parameter, also %1 dort an.
Grüße
Biber
lass mal kurz die Variable %%n außen vor.
Wenn Du irgendwo in Deinem Batch diesen ":Client_da"-Block CALLst mit...
Call :client_da "eins" "zwei" "waschmaschin"
dann kommen "unten" aus Sicht des geCALLten Blocks ":Client_da" drei Parameter an...
::... im Block :Client_da
:Client_da
:: %1 == Parameter1 == "eins"
:: %2 == Parameter2 == "zwei"
:: %3 == Parameter3 == "waschmaschin"
Wenn Du ihn rufst mit "call :client_da Hallo, jemand zu Hause?
::... im Block :Client_da
:Client_da
:: %1 == Parameter1 == Hallo
:: %2 == Parameter2 == jemand
:: %3 == Parameter3 == zu
:: ..... usw.
Und wenn Du den Block CALLst mit "call :client_da %%n" und %%n ist ein Schleifenwert von 1 bis 255...
Dann kommt nacheinander die 1, die 2, die 3....die 255 als erster Parameter, also %1 dort an.
Grüße
Biber