Как получить 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
Возможно ли это?
Ответы
Ответ 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"