it-swarm.com.de

Wie bekomme ich die IP-Adresse in eine Batchdatei-Variable?

Ich habe eine seltsame Frage, nicht sicher, ob es möglich ist.

Ich möchte ein Skript schreiben, und ich werde zum Beispiel ipconfig als meinen Befehl verwenden.

Wenn Sie diesen Befehl jetzt normalerweise ausführen, wird eine Tonne ausgegeben.

Was ich haben möchte, ist ein Skript, das zum Beispiel nur die IP-Adresse anzeigt.

echo Network Connection Test
ipconfig <---This would run in the background
echo Your IP Address is: (INSERT IP ADDRESS HERE)

Die Ausgabe wäre

Network Connection Test

Your IP Address is: 192.168.1.1

Ist das überhaupt möglich?

44
level42

Dadurch werden die IP-Adressen in der Ausgabe von ipconfig gedruckt:

@echo off
set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
echo Network Connection Test
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do echo Your IP Address is: %%f

Um nur die erste IP-Adresse zu drucken, fügen Sie einfach goto :eof (oder ein anderes Label, zu dem gesprungen werden soll anstelle von :eof) nach dem Echo oder in besser lesbarer Form:

set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do (
    echo Your IP Address is: %%f
    goto :eof
)

Ein besser konfigurierbarer Weg wäre, die Ausgabe von ipconfig /all ein bisschen, auf diese Weise können Sie sogar den Adapter angeben, dessen IP-Adresse Sie möchten:

@echo off
setlocal enabledelayedexpansion
::just a sample adapter here:
set "adapter=Ethernet adapter VirtualBox Host-Only Network"
set adapterfound=false
echo Network Connection Test
for /f "usebackq tokens=1-2 delims=:" %%f in (`ipconfig /all`) do (
    set "item=%%f"
    if /i "!item!"=="!adapter!" (
        set adapterfound=true
    ) else if not "!item!"=="!item:IP Address=!" if "!adapterfound!"=="true" (
        echo Your IP Address is: %%g
        set adapterfound=false
    )
)
39
mousio

Der folgende Code funktioniert auf jedem Gebietsschema einer beliebigen Plattform seit Windows XP und sucht nach der Netzwerk-IP von einer (mehr oder weniger) zufälligen Ihrer Netzwerkkarten. Es wird nie länger als ein paar Millisekunden dauern.

for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do set NetworkIP=%%a
echo Network IP: %NetworkIP%

Die folgende sucht stattdessen nach Ihrer öffentlichen IP und funktioniert auf Windows 7 und neueren Computern.

for /f %%a in ('powershell Invoke-RestMethod api.ipify.org') do set PublicIP=%%a
echo Public IP: %PublicIP%  

Ausführliche Erklärungen zu diesen Befehlen finden Sie unter mein Blog .

49
Fabio Iotti

In Windows 7:

for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set ip=%%b
set ip=%ip:~1%
echo %ip%
pause
16
OptekProduction

Das Extrahieren der Adresse von alleine ist ein bisschen schwierig, aber Sie können die gesamte IP-Adresszeile problemlos abrufen.

So zeigen Sie alle IP-Adressen unter einem englischsprachigen Windows-Betriebssystem an:

ipconfig | findstr /R /C:"IP.* Address"

So zeigen Sie unter Windows 7+ nur IPv4- oder IPv6-Adressen an:

ipconfig | findstr /R /C:"IPv4 Address"

ipconfig | findstr /R /C:"IPv6 Address"

Hier ist ein Beispiel einer Ausgabe von einem XP Computer mit 3 Netzwerkadaptern.

        IP Address. . . . . . . . . . . . : 192.168.1.10
        IP Address. . . . . . . . . . . . : 10.6.102.205
        IP Address. . . . . . . . . . . . : 192.168.56.1
13
indiv
@echo off

FOR /F "tokens=4 delims= " %%i in ('route print ^| find " 0.0.0.0"') do set localIp=%%i

echo Your IP Address is: %localIp%
12

Dies funktioniert auch, wenn Sie über virtuelle Netzwerkadapter oder VPN-Verbindungen verfügen:

FOR /F "tokens=4 delims= " %%i in ('route print ^| find " 0.0.0.0"') do set localIp=%%i
echo Your IP Address is: %localIp%
4
SergeyA

Dies ist eine Modifikation von @ mousios Antwort. Meine Netzwerkverbindung ist nicht persistent, daher wird die IP-Adresse des nächsten Adapters angezeigt, wenn die Zeichenfolge "IPv4-Adresse" in ipconfig fehlt. Das Ergebnis von ipconfig enthält 2 Leerzeichen zwischen Adaptern. Nachdem ein Adapter gefunden wurde und 2 leere Zeilen vor dem Text "IPv4-Adresse" angezeigt werden, wird davon ausgegangen, dass er fehlt. Nur unter Windows 7 64-Bit getestet.

Die Verarbeitung von Leerzeilen aus @ dbenhams Antwort in: DOS-Batch-FOR-Schleife mit FIND.exe entfernt Leerzeilen?

@echo off

rem --- complete adapter name to find without the ending ":" ---
set adapter=Wireless LAN adapter Wireless Network Connection

rem --- token under an adapter to extract IP address from ---
set IPAddrToken=IPv4 Address

setlocal enableextensions enabledelayedexpansion
set adapterfound=false
set emptylines=0
set ipaddress=

for /f "usebackq tokens=1-3 delims=:" %%e in (`ipconfig ^| findstr /n "^"`) do (

    set "item=%%f"

    if /i "!item!"=="!adapter!" (
        set adapterfound=true
        set emptylines=0
    ) else if not "!item!"=="" if not "!item!"=="!item:%IPAddrToken%=!" if "!adapterfound!"=="true" (
        @rem "!item:%IPAddrToken%=!" --> item with "IPv4 Address" removed
        set ipaddress=%%g
        goto :result
    )
    if "%%f-%%g-!adapterfound!-!emptylines!"=="--true-1" (
        @rem 2nd blank line after adapter found
        goto :result
    )
    if "%%f-%%g-!adapterfound!-!emptylines!"=="--true-0" (
        @rem 1st blank line after adapter found
        set emptylines=1
    )
)

endlocal

:result
    echo %adapter%
    echo.
    if not "%ipaddress%"=="" (
        echo    %IPAddrToken% =%ipaddress%
    ) else (
        if "%adapterfound%"=="true" (
            echo    %IPAddrToken% Not Found
        ) else (
            echo    Adapter Not Found
        )
    )
    echo.

pause
3
Ian

Die Verwendung von IPCONFIG ist sinnvoll, es sei denn, Sie möchten zusätzlich zum lokalen Host die IP-Adresse eines Remote-Hosts abrufen. Gehen Sie wie folgt vor, um mit PING auf www.google.com zuzugreifen:

for /f "tokens=2 delims=[]" %%f in ('ping -4 -n 1 www.google.com ^|find /i "pinging"') do echo IP=%%f

Das Ergebnis für dieses Beispiel ist:

IP=173.194.73.106

Um die erste IP Ihres lokalen Hosts zu erhalten, ersetzen Sie "www.google.com" durch "% computername%" ohne Anführungszeichen. Beachten Sie, dass das vorangestellte "-4" immer die IPv4-Adresse anstelle einer möglichen IPv6-Adresse erhält. Nach Bedarf weglassen. Beachten Sie auch, dass diese Technik nicht mehr als eine IP-Adresse erhalten kann. Wenn dies Ihr Ziel ist, müssen Sie NSLOOKUP mit zusätzlichem Code verwenden.

Wenn Sie jedoch NSLOOKUP anstelle von PING verwenden und der Host mehr als eine IP-Adresse hat, wird Ihre Variable am Ende mit einem Komma versehen, da jede Adresse durch ein Komma getrennt wird.

2
Lizz

Ich weiß, dass dies ein älterer Beitrag ist, aber ich bin darauf gestoßen, als ich versuchte, dasselbe Problem in vbscript zu lösen. Ich habe dies nicht mit mehreren Netzwerkadaptern getestet, hoffe aber, dass es trotzdem hilfreich ist.

for /f "delims=: tokens=2" %%a in ('ipconfig ^| findstr /R /C:"IPv4 Address"') do (set tempip=%%a)  
set tempip=%tempip: =%  
echo %tempip%

Dies setzt Win7 voraus. Ersetzen Sie für XP IPv4 Address mit IP Address.

2
skywalkr73

Einzeiliger Befehl in Windows um die IP-Adresse zu erhalten.

for /F "tokens=14" %%i in ('"ipconfig | findstr IPv4"') do SET LOCAL_IP=%%i

Nach diesem Befehl echo %LOCAL_IP% gibt die IP-Adresse aus. Oder Sie können %LOCAL_IP% als Referenzvariable in Ihrem Batch-Skript

1
vkrams

Angenommen, Sie erwähnen ein Windows-Betriebssystem: i p config

Wenn Sie bereit sind, einige Unixy-Dienstprogramme wie einen Windows-Port von grep and cut zu installieren, können Sie dies tun. In Fällen wie Ihrem Beispiel mit ipconfig kann es jedoch zu Problemen auf Computern mit mehreren Netzwerkkarten oder beispielsweise VMWare kommen.

Powershell könnte das Werkzeug sein, das Sie wollen, schauen Sie hier für ein Beispiel.

1
fvu

In einer Linux-Umgebung:

ip="$(ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -d ':' -f 2)"

oder

ip="$(ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -d ':' -f 2)" | echo $ip

beispiel in FreeBSD:

ifconfig re0 | grep -v "inet6" | grep -i "inet" | awk '{print $2}'

Wenn Sie mehr als eine IP-Adresse konfiguriert haben, enthält stdout mehr als eine IP-Adresse.

0
Jonny_Starky

Das Folgende wurde alles in cygwin auf einer Windows XP Box gemacht.

Dies wird Ihre IP-Adresse erhalten. Beachten Sie, dass der Befehl hostname in Anführungszeichen steht und keine einfachen Anführungszeichen.

ping -n 1 `hostname` | grep "Reply from " | cut -f 3 -d " " | cut -f 1 -d ":"

Dies wird Ihr Subnetz erhalten.

ping -n 1 `hostname` | grep "Reply from " | cut -f 3 -d " " | cut -f "1 2 3" -d "."

Im Folgenden werden alle Hosts in Ihrem lokalen Netzwerk aufgelistet (in ein Skript mit dem Namen "netmap"). Ich hatte die obige Subnetz-Zeile in eine ausführbare Datei mit dem Namen "getsubnet" eingefügt, die ich dann über das folgende Skript aufrief.

MINADDR=0
MAXADDR=255
SUBNET=`getsubnet`

hostcnt=0

echo Pinging all addresses in ${SUBNET}.${MINADDR}-${MAXADDR}

for i in `seq $MINADDR $MAXADDR`; do
addr=${SUBNET}.$i
ping -n 1 -w 0 $addr > /dev/null

if [ $? -ne 1 ]    
then    
echo $addr UP    
hostcnt=$((hostcnt+1))    
fi

done

echo Found $hostcnt hosts on subnet ${SUBNET}.${MINADDR}-${MAXADDR}
0
Paul McNabb

Sie verwenden den Befehl ipconfig, um IPv4 abzurufen.

Hilfe-Link = for /?

Hilfe = ipconfig /?

Hier ist mein Weg =

for /f "tokens=1-2 delims=:" %%a in ('ipconfig ^|find "IPv4"') do set Oo=%%b
Echo %Oo%
cd "%ProgramFiles%\Mozilla Firefox"
Firefox.exe %Oo%
0
scientist_7

Das folgende Skript speichert die IP-Adresse in der Variablen ip_address

@echo off

call :get_ip_address
echo %ip_address%

goto :eof

REM
REM get the ip address
REM
:get_ip_address
FOR /f "tokens=1 delims=:" %%d IN ('ping %computername% -4 -n 1 ^| find /i "reply"') do (FOR /F "tokens=3 delims= " %%g IN ("%%d") DO set ip_address=%%g)

goto :eof

Ideen von dieser Blog-Beitrag .

0
Mingjiang Shi