批处理命令 显示所要查找字符串所在行的下面行内容—急~~~在线等~!
我需要从下面文件中将<fmoduleId>1</fmoduleId>和<fmoduleId>249</fmoduleId>的ip地址取出保存:<config><route...
我需要从下面文件中将<fmoduleId>1</fmoduleId>和<fmoduleId>249</fmoduleId>的ip地址取出保存:
<config>
<route>
<nodeName>1</nodeName>
<nodeType>1</nodeType>
<deviceId>20</deviceId>
<fmoduleId>1</fmoduleId>
<bmoduleId>129</bmoduleId>
<ip>129.0.31.254</ip>
<port>5057</port>
</route>
<route>
<nodeName>1</nodeName>
<nodeType>1</nodeType>
<deviceId>20</deviceId>
<fmoduleId>249</fmoduleId>
<bmoduleId>129</bmoduleId>
<ip>129.0.31.249</ip>
<port>5057</port>
</route>
</config>
再请教下,if下面的几个SET没有看明白?在指点下~!谢谢~! 展开
<config>
<route>
<nodeName>1</nodeName>
<nodeType>1</nodeType>
<deviceId>20</deviceId>
<fmoduleId>1</fmoduleId>
<bmoduleId>129</bmoduleId>
<ip>129.0.31.254</ip>
<port>5057</port>
</route>
<route>
<nodeName>1</nodeName>
<nodeType>1</nodeType>
<deviceId>20</deviceId>
<fmoduleId>249</fmoduleId>
<bmoduleId>129</bmoduleId>
<ip>129.0.31.249</ip>
<port>5057</port>
</route>
</config>
再请教下,if下面的几个SET没有看明白?在指点下~!谢谢~! 展开
展开全部
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,* delims=: " %%a in ('findstr /n .* "a.txt"') do (
set "num=%%a"
set "var=%%b"
if /i "!var:~0,11!"=="<fmoduleId>" (
set "fmoduleId=!var:~11!"
set "fmoduleId=!fmoduleId:>=!"
set "fmoduleId=!fmoduleId:<=!"
set "fmoduleId=!fmoduleId:/=!"
set "fmoduleId=!fmoduleId:fmoduleId=!"
call :slz
echo !fmoduleId! !ip!
))
pause&exit
:slz
set "ip="
set /a num+=1
for /f "delims= " %%i in ('more +!num! a.txt') do if not defined ip set "ip=%%i"
set "ip=!ip:>=!"
set "ip=!ip:<=!"
set "ip=!ip:/=!"
set "ip=!ip:ip=!"
如楼主贴出来的内容另存为a.txt,运行上面的批处理得到结果如下
1 129.0.31.254
249 129.0.31.249
请按任意键继续. . .
不保证其他内容也能符合要求,但至少已经达到了楼主给出的这部分内容的处理要求,cmd怕特殊字符和管道符是最致命的缺陷!
if /i "!var:~0,11!"=="<fmoduleId>"
rem if不区分大小写对比变量var的前11个字符是不是<fmoduleId>,也是这个语句去判断<fmoduleId>所在行的
!var:~0,11!用法可以在set/?里寻求解答
就悬赏10,有完没完啊!问题也超过了你的范围
set 用法当然看set/?
----------------------------------------------------------
环境变量替换已如下增强:
%PATH:str1=str2%
会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。
----------------------------------------------------------
自己去试吧
set var=abc
echo %var%
set var=%var:a=1%
echo %var%
set var=%var:b=%
echo %var%
set var=%var:c=C%
echo %var%
setlocal enabledelayedexpansion
for /f "tokens=1,* delims=: " %%a in ('findstr /n .* "a.txt"') do (
set "num=%%a"
set "var=%%b"
if /i "!var:~0,11!"=="<fmoduleId>" (
set "fmoduleId=!var:~11!"
set "fmoduleId=!fmoduleId:>=!"
set "fmoduleId=!fmoduleId:<=!"
set "fmoduleId=!fmoduleId:/=!"
set "fmoduleId=!fmoduleId:fmoduleId=!"
call :slz
echo !fmoduleId! !ip!
))
pause&exit
:slz
set "ip="
set /a num+=1
for /f "delims= " %%i in ('more +!num! a.txt') do if not defined ip set "ip=%%i"
set "ip=!ip:>=!"
set "ip=!ip:<=!"
set "ip=!ip:/=!"
set "ip=!ip:ip=!"
如楼主贴出来的内容另存为a.txt,运行上面的批处理得到结果如下
1 129.0.31.254
249 129.0.31.249
请按任意键继续. . .
不保证其他内容也能符合要求,但至少已经达到了楼主给出的这部分内容的处理要求,cmd怕特殊字符和管道符是最致命的缺陷!
if /i "!var:~0,11!"=="<fmoduleId>"
rem if不区分大小写对比变量var的前11个字符是不是<fmoduleId>,也是这个语句去判断<fmoduleId>所在行的
!var:~0,11!用法可以在set/?里寻求解答
就悬赏10,有完没完啊!问题也超过了你的范围
set 用法当然看set/?
----------------------------------------------------------
环境变量替换已如下增强:
%PATH:str1=str2%
会扩展 PATH 环境变量,用 "str2" 代替扩展结果中的每个 "str1
要有效地从扩展结果中删除所有的 "str1","str2" 可以是空的。
"str1" 可以以星号打头;在这种情况下,"str1" 会从扩展结果的
开始到 str1 剩余部分第一次出现的地方,都一直保持相配。
----------------------------------------------------------
自己去试吧
set var=abc
echo %var%
set var=%var:a=1%
echo %var%
set var=%var:b=%
echo %var%
set var=%var:c=C%
echo %var%
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询