dani
Goto Top

Batch - IP-Adresse auslesen

Guten Abend zusammen,

habe mal wieder ein kleines *gg* Problem.
Folgende Situation: Einige Rechner haben mehrere IP-Adressen. Zum Teil dadurch, dass es zur LAN-Karte noch eine WLAN-Karte gibt => beide sind online! Desweitern noch 1 bzw. 2 virtuelle von einigen Geräten.

Nun haben wir in einem bestimmtes Script, dass nur ein bestimmter IP-Bereich dieses Script ausführen darf.

Nun haben wir weiter festgestellt, dass immer die letzte aufgelistete IP genommen wird. Diese ist meistens aber eine Adresse von einem virtuellen Netzwerkadapter und somit wird das Script gestoppt.

Hier ein kl. Beispiel:
Ethernetadapter WLAN-Verbindung:
        Verbindungsspezifisches DNS-Suffix: xxxxx.local
        IP-Adresse. . . . . . . . . . . . : 192.168.0.11
        Subnetzmaske. . . . . . . . . . . : 255.255.255.0
        Standardgateway . . . . . . . . . : 192.168.0.1

Ethernetadapter LAN-Verbindung:
        Verbindungsspezifisches DNS-Suffix:xxxxx.local
        IP-Adresse. . . . . . . . . . . . : 192.168.0.10
        Subnetzmaske. . . . . . . . . . . : 255.255.255.0
        Standardgateway . . . . . . . . . : 192.168.0.1

Ethernetadapter TEST-Verbindung:
        Verbindungsspezifisches DNS-Suffix:
        IP-Adresse (Autokonfig.). . . . . : 0.1.0.5
        Subnetzmaske. . . . . . . . . . . : 255.255.255.255
        Standardgateway . . . . . . . . . :
ES geht immer um die IP-Adresse der "LAN-Verbindung" bzw. um die "WLAN-Verbindung". Diese beiden Verbindungen heißen immer gleich. Also wenn LAN nicht verbunden ist, soll er die WLAN IP-Adresse auslesen.
Ich brauch legendlich eine der beiden IP-Adressen. Zuerst die von LAN ansonsten die von WLAN! Der Rest soll nicht beachtet werden.
Mit meinem Batchkenntnissen bzw. Fähigkeiten komm ich leider nicht weiter... face-smile


Grüße
Dani

Content-ID: 53890

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

Ausgedruckt am: 26.11.2024 um 21:11 Uhr

Biber
Biber 12.03.2007 um 19:55:51 Uhr
Goto Top
Moin Dani,

ich würde (wahrrscheinlich) ungefähr diese Strategie wählen, wenn nur diese IpConfig/all-Ausgabe zur Verfügung steht.

::-------- snipp GetDanisIP.bat ------
@echo off & setlocal
IpConfig /all >%temp%\DanisIp.txt
REM -Jeweils die Zeile ermitteln, in der "Ethernetadapter WLAN-Verbindung:"   
REM --  bzw. "Ethernetadapter LAN-Verbindung: steht  
for /f "delims=:" %%i in ('findstr /n "\<LAN" %temp%\DanisIp.txt') do Set /a Blockstart=%%i  
If not defined BlockStart for /f "delims=:" %%i in ('findstr /n "WLAN" %temp%\DanisIp.txt') do set /a Blockstart=%%i  
Set /a BlockStart+=2
for /f "delims=: tokens=3" %%i in ('findstr /n "." %temp%\DanisIp.txt^|findstr "%blockstart%:"') do set "theIp=%%i"  
echo Ermittelte IP ist [%theIP%]
pause
del %temp%\DanisIp.txt
::-------- snapp GetDanisIP.bat ------
[wie immer ungetestete Skizze]

Gruss
Biber
P.S. Nachtrag:
"... wenn nur diese IpConfig/all-Ausgabe zur Verfügung steht..." ....
...sollte heißen: ich würde es lieber mit etwas ermitteln, was gezielt die IP bezogen auf eine konkrete Verbindung abfragen kann (z.B. WMI).
Dieses "Finde den Beginn des Blocks, dann steht zwei Zeilen tiefer die IP-Adresse..." *hmmmmmmm*....ist nicht wirklich zeitlos elegant.
Dani
Dani 12.03.2007 um 20:26:15 Uhr
Goto Top
G' Aben Biber,
wunderbar....2 Fehler waren noch drinne, aber ich habe grad noch so gefunden! *gg*

Hier die FInalversion:
::-------- snipp GetDanisIP.bat ------
@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" %temp%\DanisIp.txt') do set /a Blockstart=%%i  
echo %Blockstart%
pause

REM -Jeweils die Zeile ermitteln, in der "Ethernetadapter WLAN-Verbindung:"   
REM - Die Zeilennummer wird in Blockstart gespeichert
if not defined BlockStart for /f "delims=:" %%i in ('findstr /n "WLAN" %temp%\DanisIp.txt') do set /a Blockstart=%%i  
echo %Blockstart%
pause

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%]
pause
del %temp%\DanisIp.txt
::-------- snapp GetDanisIP.bat ------
Und diese Funktioniert!!! *gg* Vielen Dank...

Achja Fehler:
for /f "delims= : tokens=3"
Statt der 3 muss dort die 14 stehen. Bei "delims" habe ich das Leezeichen noch hinzugefügt, da sonst bei der IP-Adresse noch ein Leerzeichen davor war.

Set /a BlockStart+=2
Mit der 3 geht es einfacher.....aus dem DNS-Suffix kann ich einfach nicht die IP auslesen! *gg*


Grüße
Dani
Biber
Biber 12.03.2007 um 21:03:25 Uhr
Goto Top
Danke für die Rückmeldung, Dani,

ich hatte mich natürlich an Deiner geposteten Ausgabe orientiert.
Deshalb kam ich auf das "zwei Zeilen später" statt "drei Zeilen später".

Egal, hast es ja verstanden, was ich meinte...

Bei dem anderen Fehler kann ich erstmal aber kein Problem feststellen:
Bei der oben geposteten Vorgabe...
>findstr /n "." f:\temp\DanisIp.txt  
1:Ethernetadapter WLAN-Verbindung:
2:        Verbindungsspezifisches DNS-Suffix: xxxxx.local
3:        IP-Adresse. . . . . . . . . . . . : 192.168.0.11
4:        Subnetzmaske. . . . . . . . . . . : 255.255.255.0
5:        Standardgateway . . . . . . . . . : 192.168.0.1
7:Ethernetadapter LAN-Verbindung:
8:        Verbindungsspezifisches DNS-Suffix:xxxxx.local
9:        IP-Adresse. . . . . . . . . . . . : 192.168.0.10
10:        Subnetzmaske. . . . . . . . . . . : 255.255.255.0
11:        Standardgateway . . . . . . . . . : 192.168.0.1
13:Ethernetadapter TEST-Verbindung:
14:        Verbindungsspezifisches DNS-Suffix:
15:        IP-Adresse (Autokonfig.). . . . . : 0.1.0.5
16:        Subnetzmaske. . . . . . . . . . . : 255.255.255.255
17:        Standardgateway . . . . . . . . . :

(=21:02:26  D:\temp=)
>for /f "delims=: tokens=3" %i in ('findstr /n "." f:\temp\DanisIp.txt^|findstr "3:"') do @echo %i  
 192.168.0.11
kommt schon das erhoffte Ergebnis.
Aber was soll's, viele Wege führen nach Redmond.... Hauptsache, mindestens eine Lösung klappt.

Gruss
Biber