批处理脚本替换多个文件中的文本

时间:2014-05-18 09:34:37

标签: batch-file powershell

我有一个多个xml文件(扩展名为“.xml”),我需要找到并替换文本。 我有以下模式的文字。

<Music href="6000111.genre" title="AAA">
<Music format="ditamap" href="000760.rock" title="222"/>
<Music format="ditamap" href="000756.rock" title="333"/>
</Music>

href目前是6位数字,扩展名为'rock'。

我需要在扩展名.rock中添加带有href的前缀'Z'。那是href="000760.rock - &gt; href="Z000760.rock

我应该得到以下结果:

<Music href="6000111.genre" title="AAA"> <Music format="ditamap" href="X000760.rock" title="222"/> <Music format="ditamap" href="X000756.rock" title="333"/> </Music> 非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

你应该付出一些努力。你有什么尝试?

这是一个解决方案:

#Get XML files
Get-ChildItem -Path "c:\myXMLsource" -Filter "*.xml" | ForEach-Object {
    #Read all text in file
    (Get-Content $_.FullName) |
    #Foreach line, Add Z prefix in href value.
    ForEach-Object { $_ -replace '(?<=href=")(\d{6})(?=\.rock")', 'Z$1' } |
    #Save text
    Set-Content $_.FullName
}

答案 1 :(得分:0)

这使用名为repl.bat的帮助程序批处理文件 - 从https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

下载

repl.bat放在与批处理文件相同的文件夹中或放在路径上的文件夹中。

@echo off
for %%a in (*.xml) do (
type "%%a" | repl "([0-9]*\.rock)" "Z$1" >"%%a.tmp"
move /y "%%a.tmp" "%%a"
)