基于文件名批量填充XML文件指定标签内容的方法咨询
基于文件名批量填充XML文件指定标签内容的方法咨询
嘿,这个批量修改XML的需求完全可以用脚本高效搞定,给你几个不同平台的实用方案,按需选择就行:
方案一:Python脚本(跨平台,适合所有系统)
Python的xml.etree.ElementTree模块能轻松处理XML结构,脚本可读性强还容易调整。把下面的代码保存为fill_xml_tags.py,放到你的XML文件目录里运行就行:
import os import xml.etree.ElementTree as ET # 遍历当前目录下所有以.xml结尾的文件 for filename in os.listdir('.'): if filename.endswith('.xml'): # 从文件名提取日期和自定义名称部分 name_parts = filename.replace('.xml', '').split('_', 1) if len(name_parts) != 2: print(f"跳过不符合格式的文件:{filename}") continue date_str, title_str = name_parts # 解析XML文件 tree = ET.parse(filename) root = tree.getroot() # 填充<date>标签 date_tag = root.find('date') if date_tag is not None: date_tag.text = date_str # 填充<title>标签 title_tag = root.find('title') if title_tag is not None: title_tag.text = title_str # 如果只想把整个文件名(不带.xml)填到title,替换上面的title_tag.text为: # title_tag.text = filename.replace('.xml', '') # 保存修改后的XML tree.write(filename, encoding='utf-8', xml_declaration=True) print(f"已处理文件:{filename}")
运行方式:打开终端/命令提示符,进入文件目录,执行python fill_xml_tags.py(Python3环境可能需要用python3)。
方案二:Windows PowerShell脚本
如果你用Windows,直接用PowerShell就能搞定,不用额外装工具。保存为Fill-XmlTags.ps1,右键选择“用PowerShell运行”:
Get-ChildItem -Filter *.xml | ForEach-Object { $filename = $_.Name $nameWithoutExt = $filename -replace '\.xml$', '' $parts = $nameWithoutExt -split '_', 2 if ($parts.Count -ne 2) { Write-Host "跳过不符合格式的文件:$filename" return } $dateStr = $parts[0] $titleStr = $parts[1] # 读取XML内容 $xml = [xml](Get-Content $_.FullName) # 填充标签 $xml.htf1.title = $titleStr $xml.htf1.date = $dateStr # 若要填充整个文件名到title,替换上面两行: # $xml.htf1.title = $nameWithoutExt # 保存修改 $xml.Save($_.FullName) Write-Host "已处理文件:$filename" }
方案三:Linux/macOS Shell脚本
用sed命令就能快速替换,因为你的XML结构很简单,没有复杂嵌套,适合用文本替换的方式:
#!/bin/bash for file in *.xml; do if [[ ! -f "$file" ]]; then continue fi name_no_ext="${file%.xml}" # 分割日期和文件名部分 IFS='_' read -r date_str title_str <<< "$name_no_ext" # 替换<title>标签内容 sed -i.bak "s/<title><\/title>/<title>$title_str<\/title>/g" "$file" # 替换<date>标签内容 sed -i.bak "s/<date><\/date>/<date>$date_str<\/date>/g" "$file" # 如果只想把整个文件名填到title,替换上面的sed命令为: # sed -i.bak "s/<title><\/title>/<title>$name_no_ext<\/title>/g" "$file" # 删除备份文件(可选) rm "${file}.bak" echo "已处理文件:$file" done
保存为fill_xml.sh,执行chmod +x fill_xml.sh赋予执行权限,然后运行./fill_xml.sh即可。
所有方案都做了格式校验,会跳过不符合YYYY-MM-DD_filename.xml格式的文件,避免出错。如果只是需要把整个文件名(不带后缀)填到title里,注释掉对应代码,打开简化版本的代码就行。
备注:内容来源于stack exchange,提问作者niessenty
相关产品推荐
相关产品推荐

