Подтвердить что ты не робот

Как получить IP-адрес в переменной пакетного файла?

У меня есть странный вопрос, не знаю, возможно ли это.

Я хотел бы написать script, и, например, я буду использовать ipconfig в качестве моей команды.

Теперь, когда вы обычно запускаете эту команду, вы получаете тонну вывода.

Я хотел бы иметь script, который будет показывать только IP-адрес, например.

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

Выход будет

Network Connection Test

Your IP Address is: 192.168.1.1

Возможно ли это?

4b9b3361

Ответ 1

Это напечатает IP-адреса в выводе ipconfig:

@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

Чтобы напечатать только первый IP-адрес, просто добавьте goto :eof (или другую метку для перехода вместо :eof) после echo или в более читаемой форме:

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
)

Более настраиваемый способ - это немного разобрать вывод ipconfig/all, чтобы вы могли даже указать адаптер, IP-адрес которого вы хотите:

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

Ответ 2

Следующий код работает с любой локалью любой платформы с Windows XP и ищет сетевой IP из (более или менее) случайных сетевых карт. Это никогда не займет больше нескольких миллисекунд.

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

Ниже приведен ваш публичный IP и работает на Windows 7 и более новых машинах.

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

Подробные объяснения этих команд можно найти на в моем блоге.

Ответ 3

В Windows 7:

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

Ответ 4

Извлечение адреса само по себе немного сложно, но вы можете легко получить всю строку IP-адреса.

Чтобы показать все IP-адреса на любой ОС Windows на английском языке:

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

Чтобы показывать только адреса IPv4 или IPv6 в Windows 7 +:

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

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

Здесь приведен пример вывода из компьютера XP с 3 сетевыми адаптерами.

        IP Address. . . . . . . . . . . . : 192.168.1.10
        IP Address. . . . . . . . . . . . : 10.6.102.205
        IP Address. . . . . . . . . . . . : 192.168.56.1

Ответ 5

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

Ответ 6

Эта работа, даже если у вас есть виртуальные сетевые адаптеры или VPN-соединения:

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

Ответ 7

Это модификация ответа @mousio. Мое сетевое подключение не является постоянным, поэтому IP-адрес следующего адаптера отображается, если строка "IPv4-адрес" отсутствует в ipconfig. Результат ipconfig имеет 2 пробела между адаптерами. После того, как адаптер найден, и перед текстом "IPv4 Address" появляется две пустые строки, предполагается, что он отсутствует. Протестировано только в 64-разрядной версии Windows 7.

Обработка пустых строк из @dbenham в: Цикл цикла DOS FOR с FIND.exe удаляет пустые строки?

@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

Ответ 8

Я знаю, что это более старая запись, но я столкнулся с этим, пытаясь решить ту же проблему в vbscript. Я не тестировал это с помощью многоплатных сетевых адаптеров, но надеюсь, что он будет полезен, тем не менее.

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

Это предполагает Win7. Для XP замените IPv4 Address на IP Address.

Ответ 9

Использование IPCONFIG является хорошим, если вы не хотите гибкости получения IP-адреса удаленного хоста в дополнение к локальному хосту. Чтобы получить его от чего-то вроде www.google.com, используя PING try:

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

Результат для этого примера:

IP=173.194.73.106

Чтобы получить первый IP-адрес вашего локального хоста, замените "www.google.com" на "% computername%%" без кавычек. Обратите внимание, что "-4" спереди всегда будет получать IPv4-адрес вместо возможного IPv6-адреса. Опустите при необходимости. Также обратите внимание, что этот метод не может получить более одного IP-адреса. Если это ваша цель, вам нужно будет использовать NSLOOKUP с некоторым дополнительным кодом.

Помните, что если вы используете NSLOOKUP вместо PING, а на хосте более одного IP-адреса, ваша переменная будет иметь запятую в конце, так как каждый адрес будет разделен запятой.

Ответ 10

Предполагая, что ОС Windows упоминает я p config

Если вы хотите установить некоторые утилиты Unixy, такие как windows-port grep и cut, вы можете это сделать. Однако в таких случаях, как ваш пример с ipconfig, это будет беспорядок на машинах с несколькими сетевыми адаптерами или, например, VMWare.

Powershell может быть инструментом, который вы хотите, посмотрите здесь для примера.

Ответ 11

В среде linux:

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

или

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

пример во FreeBSD:

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

Если у вас настроено более одного IP-адреса, у вас будет несколько IP-адресов в стандарте.

Ответ 12

Однострочная команда в Windows для получения IP-адреса.

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

После этой команды echo %LOCAL_IP% напечатает IP-адрес. Или вы можете использовать %LOCAL_IP% качестве ссылочной переменной в вашем пакетном скрипте

Ответ 13

В cygwin в Windows XP было выполнено следующее.

Это получит ваш IP-адрес. Обратите внимание, что вокруг команды hostname есть обратные кавычки, а не одиночные кавычки.

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

Это приведет к вашей подсети.

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

Ниже перечислены все хосты в вашей локальной сети (введите его в script, называемый "netmap" ). Я взял строку подсети выше и поместил ее в исполняемый файл под названием "getubnet", который затем я вызвал из следующего script.

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}

Ответ 14

Ниже script будет сохранен IP-адрес переменной 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

Идеи этот пост в блоге.

Ответ 15

Вы используете команду ipconfig, чтобы получить IPv4.

Справка Ссылка = for/?

Help = ipconfig/?

Вот мой путь =

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

Ответ 16

попробуйте что-то вроде этого

echo "yours ip addresses are:"
ifconfig | grep "inet addr" | cut -d':' -f2 | cut -d' ' -f1

Linux-подобные системы

Ответ 17

если вы просто хотите, чтобы ip-адрес попробовал это:

#Variable to store ip address
ipaddr=$(hostname -I)

echo "$ipaddr"