关于批处理FOR /f 截取特定字符串为变量问题!
各位大侠好,我想用批处理,先做ipconfig>ipconfig.txt然后在里面提取IP地址作为变量a,XP中,需要的字段是最后一个,因此我用如下代码执行顺利:ipco...
各位大侠好,我想用批处理,先做ipconfig>ipconfig.txt然后在里面提取IP地址作为变量a,XP中,需要的字段是最后一个,因此我用如下代码执行顺利:
ipconfig>ipconfig.txt
Setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%i in ('ipconfig^|find /i "IPv4 地址"') do (
set str=%%j
set a=!str: =!
)
成功将我需要的最后一个符合条件的IP地址设置成变量a
但是在WIN7下,ipconfig命令把我要的字符串放在第一个,FOR执行后面的那一行没用的,win7里,ipconfig生成的文件如下:
Windows IP 配置
PPP 适配器 SINLALA:
连接特定的 DNS 后缀 . . . . . . . :
IPv4 地址 . . . . . . . . . . . . : abc.def.xx.sdf
子网掩码 . . . . . . . . . . . . : 255.255.255.255
默认网关. . . . . . . . . . . . . :
以太网适配器 本地连接:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : md80::mana:9str:f850:459%12
IPv4 地址 . . . . . . . . . . . . : 192.168.1.2
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1
隧道适配器 isatap.{638A9D5C-E7B8-4PX5-90TC-3S9E9C853M7L}:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
后面还有一大串废物数据,我不再写了,我上面写的代码只提取了以太网适配器里的IP,而不是PPP适配器里的IP,如果是后面的好办,skip就可以搞定,但是这个需要怎么搞定?我只要PPP适配器里的 IPv4 地址 . . . . . . . . . . . . : abc.def.xx.sdf冒号后面的字符串作为变量a,本地连接适配器里的 IPv4 地址 . . . . . . . . . . . . : 192.168.1.2不需要。他们所在的行数不是固定的。
这段批处理命令怎么写?
在这里先谢谢大侠的指教!
PPP适配器是我建立的VPN连接,用的是ppptp。 展开
ipconfig>ipconfig.txt
Setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%i in ('ipconfig^|find /i "IPv4 地址"') do (
set str=%%j
set a=!str: =!
)
成功将我需要的最后一个符合条件的IP地址设置成变量a
但是在WIN7下,ipconfig命令把我要的字符串放在第一个,FOR执行后面的那一行没用的,win7里,ipconfig生成的文件如下:
Windows IP 配置
PPP 适配器 SINLALA:
连接特定的 DNS 后缀 . . . . . . . :
IPv4 地址 . . . . . . . . . . . . : abc.def.xx.sdf
子网掩码 . . . . . . . . . . . . : 255.255.255.255
默认网关. . . . . . . . . . . . . :
以太网适配器 本地连接:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : md80::mana:9str:f850:459%12
IPv4 地址 . . . . . . . . . . . . : 192.168.1.2
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1
隧道适配器 isatap.{638A9D5C-E7B8-4PX5-90TC-3S9E9C853M7L}:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
后面还有一大串废物数据,我不再写了,我上面写的代码只提取了以太网适配器里的IP,而不是PPP适配器里的IP,如果是后面的好办,skip就可以搞定,但是这个需要怎么搞定?我只要PPP适配器里的 IPv4 地址 . . . . . . . . . . . . : abc.def.xx.sdf冒号后面的字符串作为变量a,本地连接适配器里的 IPv4 地址 . . . . . . . . . . . . : 192.168.1.2不需要。他们所在的行数不是固定的。
这段批处理命令怎么写?
在这里先谢谢大侠的指教!
PPP适配器是我建立的VPN连接,用的是ppptp。 展开
3个回答
展开全部
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('ipconfig') do (
set "var=%%i"&set "str=!var: =!"
if "!str:~0,6!"=="PPP适配器" set flag=a
if defined flag (
if "!str:~0,6!"=="IPv4地址" (
set "str=!var:*:=!"
set "a=!str:~1!"
set "flag="
)
)
)
echo %a%
pause
for /f "delims=" %%i in ('ipconfig') do (
set "var=%%i"&set "str=!var: =!"
if "!str:~0,6!"=="PPP适配器" set flag=a
if defined flag (
if "!str:~0,6!"=="IPv4地址" (
set "str=!var:*:=!"
set "a=!str:~1!"
set "flag="
)
)
)
echo %a%
pause
展开全部
for嵌套就行了啊:
@echo off&setlocal enabledelayedexpansion
ipconfig | findstr "IPv4" > ip.x
set n=0
for /f "delims=" %%i in (ip.x) do (
set /a n+=1
if !n! equ 1 (
for /f "tokens=15 delims=: " %%a in ("%%i") do (
rem for "tokens=2 delims=:" %%a in ("%%i") do (
rem set "str=%%i"
rem set str=!str: =!
rem echo=!str!
rem )
set str=%%a
echo=!str!
)
)
)
pause
@echo off&setlocal enabledelayedexpansion
ipconfig | findstr "IPv4" > ip.x
set n=0
for /f "delims=" %%i in (ip.x) do (
set /a n+=1
if !n! equ 1 (
for /f "tokens=15 delims=: " %%a in ("%%i") do (
rem for "tokens=2 delims=:" %%a in ("%%i") do (
rem set "str=%%i"
rem set str=!str: =!
rem echo=!str!
rem )
set str=%%a
echo=!str!
)
)
)
pause
更多追问追答
追问
弱弱的问一句:ip.x是什么文件?另外,有的电脑里,不全是我这种状况,有时候,有宽带连接,PPP适配器信息处在第二个甚至第三个位置,这段代码能准确的捕获PPP适配器的IP地址么?如果不是,再怎么改?我要将变量a作为静态路由目标地址进行映射,捕获变量后添加静态路由的代码我会写!
有劳大侠,30分悬赏,让您改两次代码,辛苦了!改好了,我采纳时,再加分数!加点悬赏也不算啥,仅仅用这表达我对高手的敬意!
崇拜加感谢!
追答
@echo off&setlocal enabledelayedexpansion
ipconfig > ip.x
for /f "delims=" %%i in (ip.x) do (
set "line=%%i"
rem PPP开头设为起始行
rem 往下两行是IPv4行
set /a keynum+=1
if "!line:~0,3!" equ "PPP" (set keynum=0)
rem echo=!keynum!==%%i
if !keynum!==2 (
for /f "tokens=15 delims=: " %%a in ("%%i") do (
set str=%%a
echo=!str!
)
)
)
pause
ip.x 是临时文件,可以删除。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个我也不太清楚,你问问别人
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询