如何将IP地址转换为batch filevariables?

我有一个奇怪的问题,不知道它是否可能。

我想写一个脚本,例如我将使用ipconfig作为我的命令。

现在,当你正常运行这个命令时,就有一吨的输出。

我想要的是一个脚本,只会显示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 

这甚至有可能吗?

这将在ipconfig的输出中打印IP地址:

 @echo off set ip_address_string="IP Address" rem Uncomment the following line when using Windows 7 (with removing "rem")! rem set ip_address_string="IPv4 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地址,只需在echo之后添加goto :eof (或者另一个标签来跳转,而不是:eof ),或者以更易读的forms添加:

 set ip_address_string="IP Address" rem Uncomment the following line when using Windows 7 or Windows 8 / 8.1 (with removing "rem")! rem set ip_address_string="IPv4 Address" for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do ( echo Your IP Address is: %%f goto :eof ) 

一个更可configuration的方法是实际parsingipconfig /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 ) ) 

以下代码适用于自Windows XP以来的任何平台的任何语言环境,并从网卡的(随机)(或多或less)随机查找networkingIP 。 它永远不会超过几毫秒。

 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% 

你可以在我的博客上find这些命令的详细解释。

在Windows 7中:

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

自己提取地址有点困难,但可以轻松获得整个IP地址线。

在任何英文Windows操作系统上显示所有IP地址:

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

要在Windows 7+上仅显示IPv4或IPv6地址,请执行以下操作:

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

以下是一个XP机器的3个networking适配器的示例输出。

  IP Address. . . . . . . . . . . . : 192.168.1.10 IP Address. . . . . . . . . . . . : 10.6.102.205 IP Address. . . . . . . . . . . . : 192.168.56.1 
 @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% 

这是@ mousio的答案的修改。 我的networking连接不是永久的,因此如果ipconfig中缺lessstring“IPv4地址”,则会显示下一个适配器的IP地址。 ipconfig的结果在适配器之间有两个空格。 find适配器后,在“IPv4地址”文本之前出现2个空白行,则认为它缺失。 仅在Windows 7 64位上进行testing。

处理@ dbenham的答案在空行: DOS批处理循环与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 

即使您有一个虚拟的networking适配器或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% 

使用IPCONFIG是很好的,除非你想获得本地主机以外的远程主机的IP的灵活性。 使用PING从www.google.com这样的东西得到它的尝试:

 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”replace为不带引号的“%computername%”。 请注意,前面的“-4”将始终获得IPv4地址,而不是可能的IPv6地址。 根据需要省略。 还要注意,这种技术不能获得多个IP地址。 如果这是您的目标,则需要使用带有一些额外代码的NSLOOKUP。

请注意,如果你使用NSLOOKUP而不是PING,并且主机有多个IP地址,那么你的variables最后会有一个逗号,因为每个地址都用逗号隔开。

我知道这是一个较旧的post,但我试图解决同样的问题在vbscript中跑过这个。 我还没有用多个networking适配器testing过这个,但是希望它有帮助。

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

这假定Win7。 对于XP,请使用IP AddressreplaceIPv4 Address IP Address

假设一个Windows操作系统,你提到我的configuration

如果你愿意安装一些Unixy工具,比如grep的windows-port,那么你可以这样做。 但是,在像ipconfig这样的情况下,在具有多个NIC或VMWare的机器上将会是一团糟。

Powershell可能是你想要的工具, 在这里看一个例子。

在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}' 

如果您configuration了多个IP地址,则标准输出中将有多个IP地址。

尝试这样的事情

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

linux就像系统一样

以下全部在Windows XP机器上的cygwin中完成。

这将得到您的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 "." 

以下将列出本地networking上的所有主机(将其放入称为“netmap”的脚本)。 我已经把上面的子网行,并把它放到一个名为“getsubnet”,然后我从下面的脚本调用的可执行文件。

 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} 

下面的脚本将IP地址存储到variablesip_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 

从这个博客文章的想法。

如果你只是想要的IP地址试试这个:

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