Windows批处理解析XML标签属性:提取并拼接filename值
Windows批处理解析XML并拼接标签filename属性值
示例XML(参考)
<Root> <File filename="c:\here\there.txt" /> <File filename="c:\here\there2.txt" /> <File filename="d:\docs\file3.docx" /> </Root>
期望输出
"c:\here\there.txt" "c:\here\there2.txt" "d:\docs\file3.docx"
修正后的批处理代码
@echo off setlocal enabledelayedexpansion :: 初始化拼接变量为空 set "file_list=" :: 筛选包含<File filename=的行并提取属性值 for /f "tokens=2 delims== " %%a in ('findstr /i "<File filename=" input.xml') do ( :: 截取带引号的属性值,清理结尾的无效字符 set "current_file=%%a" set "current_file=!current_file:"/>=!" set "current_file=!current_file:" >=!" :: 累积到结果变量 set "file_list=!file_list! !current_file!" ) :: 移除开头多余的空格 set "file_list=!file_list:~1!" :: 输出最终拼接结果 echo %file_list% endlocal
关键说明
- 延迟扩展必须开启:
setlocal enabledelayedexpansion是核心,for循环内部修改并读取变量时,需要用!变量名!替代%变量名%,才能获取实时更新的变量值,这是你之前无法累积变量的主要原因。 - 属性值提取逻辑:通过
findstr筛选目标行,再用for /f以=和空格为分隔符提取第二个token(即带引号的filename值)。 - 清理无效字符:针对XML标签结尾的
"/>或" />格式,通过变量替换去掉多余部分,确保只保留带引号的路径。 - 变量拼接:每次将当前属性值追加到结果变量,最后移除开头的多余空格,得到标准格式的字符串。
注意事项
- 替换代码中的
input.xml为你的实际XML文件路径。 - 如果XML中
filename属性使用单引号或格式特殊,需要调整delims和变量替换的规则。 - 若路径本身包含空格,只要XML中属性值已用引号包裹,就能被正确保留。
内容的提问来源于stack exchange,提问作者dev4life
相关产品推荐
相关产品推荐

