首页 > 解决方案 > 回声关闭(批处理脚本)

问题描述

这是我的脚本(它从 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%

我得到的是:回声已关闭

标签: batch-file

解决方案


您不能确定 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.是该行的其余部分如果有的话。


推荐阅读