kim
Goto Top

Batch IP Adresse herausfinden und Oktette zerlegen

Hallo,

ich habe das Problem, dass ich bei einer Softwareverteilung dies nur auf einen bestimmten IP-Adressbereich verteilen kann, aber die Rechnernamen nach gleicher Syntax aufgebaut sind XX-YY-[001-***]

Jetzt sollte die Batch vor starten der Verteilung jeden Rechner auf die IP überprüfen und zwar müssen die ersten 3 Oktette 192.168.123. sein.

Ich hab schon einige Zeit mit Googeln und Testen verbracht, jedoch ohne Erfolg.

Wäre nett, wenn mir jemand einen Tipp geben könnte.

Vielen Dank im Vorraus!

Kim

Content-ID: 111960

Url: https://administrator.de/contentid/111960

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

godlie
godlie 20.03.2009 um 14:03:09 Uhr
Goto Top
Hier ein Ansatz an der If Schleife und deren GOTOS kannst du dich dann austoben.
grüße

@echo off & setlocal
ipconfig >%temp%\DanisIp.txt

REM --  bzw. "Ethernetadapter LAN-Verbindung: steht  
REM - Die Zeilennummer wird in Blockstart gespeichert
for /f "delims=:" %%i in ('findstr /n "\<LAN-Verbindung\>" %temp%\DanisIp.txt') do set /a Blockstart=%%i  
REM Zeilen überspringen
set /a BlockStart+=3
REM Aus der entsprechenden Zeile die IP-Adresse auslesen bzw. splitten
for /f "tokens=14 delims=: " %%i in ('findstr /n "." %temp%\DanisIp.txt^|findstr "%blockstart%:"') do set "theIp=%%i"  
echo Ermittelte IP ist [%theIP%]

del %temp%\DanisIp.txt

for /f "tokens=1,2,3 delims=." %%i in ('echo %theIp%') do set IPSuff=%%i.%%j.%%k  
echo %IPSuff%

IF "%IPSuff%" == "192.168.172" (  
goto treffer 
) ELSE (
goto nontreffer
)

:treffer
REM Hier der Teil wenn die IP passt
echo foobab

:nontreffer
REM Hier der Teil wo die IP nicht passt
echo fasl
Kim
Kim 20.03.2009 um 17:26:11 Uhr
Goto Top
Hmm, danke für deine schnelle Hilfe.

Das würde funktionieren, wenn ich das an einem Client starten würde, ich muss aber vom Server aus das ganze steuern, also wäre deine Variante leider nicht möglich, geht das ganze denn irgendwie mit ping %rechnername% ?

Gruß
Kim
Biber
Biber 20.03.2009 um 18:59:32 Uhr
Goto Top
Moin Kim,

reicht es nicht, wenn Du die einzelnen Rechnernamen mit
ping %rechnername%|findstr "[192\.168\.123" >nul && echo Rechner %rechnername% ist im IP-Nummernkreis
...durchnudelst?

Grüße
Biber
Kim
Kim 20.03.2009 um 19:07:26 Uhr
Goto Top
Hmm, muss ich am Montag mal testen, hab hier keinen Windows Rechner an dem ichs testen könnte, aber vielen Dank für die schnelle Antwort!

Schönes WE wünsch ich allen!

Gruß
Kim
Kim
Kim 23.03.2009 um 10:41:02 Uhr
Goto Top
Moin Biber,

grad mal getestet, mit der Syntax spuckt er bei mir nie das ECHO aus. Hast den Code mal getestet? Funktioniert er bei dir?

Gruß
Kim

Zitat von @Biber:
Moin Kim,

reicht es nicht, wenn Du die einzelnen Rechnernamen mit
> ping %rechnername%|findstr "[192\.168\.123" >nul
&& echo Rechner %rechnername% ist im IP-Nummernkreis
...durchnudelst?

Grüße
Biber
Biber
Biber 23.03.2009 um 11:58:26 Uhr
Goto Top
Moin Kim,

Ja, bei mir funktioniert es.
Allerdings ist in meinem Beispiel die Variable %rechnername% wirklich nur ein Platzhalter.
  • Testen am CMD-Prompt kannst Du ja, wenn Du gegen Deinen eigenen Rechner %computername% pingst
 ping %computername% -n 1|find "[192.168"  
Der nächste Schritt wäre dann, eine erweiterbare Test-Zeile am CMD-Prompt aufzubauen:
 for %i in (%computername%) @do ping %i -n 1|find "[192.168"  
...und diese (wenn es bis hierhin klappt) zu erweitern auf
 for %i in (%computername% unknown1 unknown2) @do ping %i -n 1|find "[192.168"  
... damit auch die Computer-nicht-erreichbar-Fälle angetestet sind.
Statt der einfachen FOR-Anweisung kannst Du auch aus einer Rechnernamen-Tetdatei lesen mit FOR /F. [For /F %i in (meinerechner.txt) do... ]

Im Batch vor der Laufvariablen ein Prozentzeichen mehr als am CMD-Prompt (%%i statt %i).

Grüße
Biber
Kim
Kim 23.03.2009 um 14:34:22 Uhr
Goto Top
Super, funktioniert :o)

Vielen Dank!!