如何自动批量编辑 Win 8.1 目录中的文本文件?

Posted

技术标签:

【中文标题】如何自动批量编辑 Win 8.1 目录中的文本文件?【英文标题】:How can I automate a mass edit of text files located in a Win 8.1 directory? 【发布时间】:2017-09-01 09:17:27 【问题描述】:

早安,

在 Win 8.1 下的特定目录中,我有这数百个扩展名为 *.xml 的文本文件,代表一个网站。

在这些文件中的每一个中,都恰好出现了一个具有已知内容的特定标签,例如<tag>old</tag>

在所有这些页面中,此特定文本需要替换为<tag>new</tag>。子目录存在,但不需要检查。

我将如何自动执行此任务? (我不熟悉 PowerShell,我认为我从未使用过它,但这会朝着正确的方向发展吗?如果不是 - 为误导性标签道歉。)

提前致谢!

【问题讨论】:

PowerShell 可用于执行此操作,没有太多困难,但我相当肯定有适用于 Windows 的 *ix 实用程序 sed 的实现,虽然我不是很熟悉使用 *ix shell,我很确定这对于 sed 来说是微不足道的。 我查看了它的语法,是的,它非常 *ixish ;) 最后,我选择了 JoeH 的答案,仅仅是因为它可以通过车载方式完成。无论如何,谢谢,杰夫! 【参考方案1】:

试试这个 PowerShell 脚本。

$myFiles=get-childitem C:\Folder *.xml -rec
foreach ($file in $myFiles)

    (Get-Content $file.PSPath) | 
    Foreach-Object $_ -replace "<tag>old</tag>", "<tag>new</tag>" | 
    Set-Content $file.PSPath

【讨论】:

这个。像魅力一样工作,而且性能也很好。赢得了良好声誉,先生,欢迎您。 确实如此。相当优雅,并再次提醒我,在使用 PowerShell 时,我的一些先入之见是错误的(我的纯 PS 解决方案将涉及一些诡计,以避免在我似乎仍在处理源文件时出现覆盖源文件...... )。 附带说明一下,您可以通过简单地将循环头写为foreach ($file in (Get-ChildItem C:\Folder *.xml -rec)) 来避免使用$myFiles 除了 Jeff 的合理化,这是真的:当然,body 的 Foreach-Object 也暗示 每次 出现 "old" 会被抓住(和替代)。虽然性能很好,但我想知道如何才能捕捉到第一次(= 唯一)出现。【参考方案2】:

检查replacer.bat

for %%# in (*.xml) do (
   call replacer.bat "%%~f#" "<tag>old</tag>" "<tag>new</tag>"
)

【讨论】:

以上是关于如何自动批量编辑 Win 8.1 目录中的文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

Win10怎么把文件夹目录树变文本?

我安装了win8 专业版 在激活时出现错误代码0x8007007B 文件名、目录名或卷标语法不正确

如何使文本文件“打开方式”我的 Win Api 文本编辑器?

Win10如何批量新建文件和文件夹

Win7/8.1/10去掉桌面快捷方式小箭头

Win32 中仅接受文本框(编辑控件)中的字符和空格