加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

从Windows批处理变量中获取子字符串

发布时间:2020-12-14 04:00:11 所属栏目:Windows 来源:网络整理
导读:在批处理文件中,我有一个包含IP的变量.仅举例如: SET ip = 170.150.120.10 我想定义另一个变量,将最后一个八位字节替换为1,在示例中为170.150.120.1. IP可以改变(它是动态定义的),长度不同,因此捕获固定长度的子串并连接它将无法在任何时候工作(在示例中它
在批处理文件中,我有一个包含IP的变量.仅举例如:

SET ip = 170.150.120.10

我想定义另一个变量,将最后一个八位字节替换为1,在示例中为170.150.120.1.

IP可以改变(它是动态定义的),长度不同,因此捕获固定长度的子串并连接它将无法在任何时候工作(在示例中它将是SET baseIP =%ip:~0.9%.1) .

如何解决这项任务?
Windows命令行中是否有一些RegEx支持?

解决方法

maytham-????λ??是一个简单解决方案的关键组成部分 – FOR / F.但是这个解决方案有很多复杂性,似乎与这个问题无关.

答案可以很简单:

@echo off
set "ip=170.150.120.10"
for /f "tokens=1-3 delims=." %%A in ("%ip%") do set "new_ip=%%A.%%B.%%C.1"
echo new ip=%new_ip%

注 – 您在问题的SET语句中包含=之前和之后的空格.这是个坏主意,因为所有空间都很重要.您有一个以空格结尾的变量名,以及以空格开头的值.我从答案中删除了不需要的空格

另外,我将作业括在引号内.只要第一个引号位于变量名称之前,就会忽略最后一个引号之后的所有字符.这可以防止您的价值中出现无意的尾随空格.

编辑2017-09-04
更简单的方法 – 将地址视为文件名,因此最后一个节点成为扩展名.使用简单的FOR和~n修饰符来获取基本名称(前3个节点),然后添加自己的扩展名(最后一个节点).

for %%A in (%ip%) do set "new_ip=%%~nA.1"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读