batch-file - 回声关闭(批处理脚本)
问题描述
这是我的脚本(它从 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%
我得到的是:回声已关闭
解决方案
您不能确定 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.
是该行的其余部分如果有的话。
推荐阅读
- c# - ASPNET 核心。排除特定操作的全局过滤器
- mean - 在 Angular 11 上构建登录页面
- ios - 如何在 iOS 13/14 中将视图添加到应用程序的顶部
- angular - core.js:30235 未捕获类型错误:无法读取未定义的属性“id”
- spring-boot - 使用 Jacoco 插件排除代码覆盖但不起作用
- node.js - 如何从 next.js 中提取下一个/图像
- python - 在 IIS 服务器中托管时出现 Django-Snowflake 外部浏览器连接问题
- android - 为什么我无法将位图转换为 .PNG 并将其保存到 Android Oreo 设备中的存储中?
- java - 带空格的 Java 填充字符串
- reactjs - React 简单地将道具传递给类组件中的父级