这是我的脚本(它从ipconfig中输出了ip)
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-2 delims=:" %%A in ('ipconfig^|find "IP"^|find ":10."') do set ip==%%B
set "ipaddress=%ip:~1%"
set "ipk=%ipaddress:~1,-2%"
echo %ipk%
我得到的是:回声关闭
答案 0 :(得分:2)
您不能确定IP地址的最后一部分是2位数字,它可以是1到254之间的任何数字,因此,切掉最后2个字符可能不会给您正确的结果。
在这种情况下幸运的是,由于ip地址之间用.
分隔,因此可以使用FOR
修饰符将它们视为文件扩展名。
通过使用findstr
(带有正则表达式搜索词)代替find
来搜索ip地址,可以将管道数量从2个减少到1个。
@echo off
set "ipk=IP_NOT_FOUND"
for /f "tokens=2 delims=:" %%A in ('ipconfig^|findstr /IRC:"IPv4.*: *10\."') do set "ipk=%%~nA."
set "ipk=%ipk: =%"
echo %ipk%
pause
但是不清楚ipk
到底代表什么,如果您打算显示网络地址,则这很可能是错误的处理方式,因为网络地址取决于子网的值必须单独获取的掩码,并使用ipaddress和子网掩码进行计算以获得正确的网络地址。
但是,这超出了您的问题范围,因此我将其保留。
您应该知道,如果有多个具有10.
IP地址的网络适配器,则它将返回最后枚举的适配器的IP地址。
对findstr
正则表达式的解释: "IPv4.*: *10\."
IPv4
包含字符串“ IPv4”的行(不区分大小写,因为/I
开关)
.*:
,后跟零个或多个任意字符,后跟冒号:
*10\.
,后跟零个或多个空格,后跟10.
和该行的其余部分(如果有)。
答案 1 :(得分:0)
您的网络范围最终可能会扩展到其他IP范围,所以我想我将添加另一个选项,您无需对起始范围进行硬编码。因此,这更多地是对查询的扩展。
在这里,我只是配置了子网,获取该范围内的IP并与您的IP匹配,然后回显它。不需要您对IP的起始范围进行硬编码:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=2,3 delims={,}" %%a in ('"wmic nicconfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do set gate_test=%%~a
set gate_test=!gate_test: =!
for /f "tokens=1-2 delims=^." %%i in ("!gate_test!") do set range=%%i.%%j
for /f "delims=:" %%l in ('ipconfig ^| findstr IPv4') do (
set ip=%%m
set ip=!ip: =!
for /f "tokens=1-2 delims=^." %%n in ("!ip!") do set iprange=%%n.%%o
if !iprange! == !range! set ipaddress=!ip!
)
)
echo !ipaddress!