实现方法
在任意位置新建一个文本文档,在其中输入以下内容:
# 定义脚本的参数
param (
[string]$search, # 需要被替换的字符串
[string]$replace, # 用于替换的字符串
[string]$path = "." # 指定搜索的路径,默认为当前目录
)
# 使用 Get-ChildItem 获取指定路径下所有扩展名为 .txt 的文件,并递归搜索子目录
Get-ChildItem -Path $path -Filter *.txt -Recurse | ForEach-Object {
# 读取文件内容,指定编码为 UTF8
$content = Get-Content $_.FullName -Encoding UTF8
# 使用正则表达式替换文本内容
# [regex]::Escape($search) 用于转义特殊字符,确保 $search 被当作普通字符串处理
$content = $content -replace [regex]::Escape($search), $replace
# 将修改后的内容写回文件,指定编码为 UTF8
Set-Content $_.FullName -Value $content -Encoding UTF8
}
# 输出完成提示信息
Write-Host "Done."
保存,将其命名为 replace_text.ps1,脚本创建完成。
要使用该批处理脚本,只需按照以下步骤操作:
1.按住 Shift 键,右键点击包含目标 .txt 文件的文件夹,然后选择“在此处打开 PowerShell 窗口”。
2.在命令行窗口中,输入以下命令(请根据实际情况替换 <search_string> 和 <replace_string>):
.\replace_text.ps1 "<search_string>" "<replace_string>"
例如,如果我们要将所有 .txt 文件中的“imp”替换为“zyf”,则输入:
.\replace_text.ps1 "imp" "zyf"
一段时间后会输出“Done.”,表示替换操作已完成。下面是替换效果:
替换前:
替换后:
问题解决
问题1:< : 无法将“<”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后 再试一次。 所在位置 行:1 字符: 1 + <path_to_replace_text.bat> "apple" "orange" + ~ + CategoryInfo : ObjectNotFound: (<:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS E:\研究生材料\项目_辐射场可视化> ath_to_replace_text.bat "imp" "zyf"
出现这种问题的原因很多,我是通过重置搜索路径为当前目录来解决的。
方法是右键编辑脚本文件,点击另存为,将其保存到和包含待替换文本文档的文件夹同一位置处。再重新试一次,没有报错。
问题2:运行批量替换脚本后,虽然替换成功了,但是汉字变成了乱码
这是因为脚本文件默认使用的编码与你的文本文档的编码不一致。
一般来说有 ANSI 和 UTF-8 两种主要的编码,这里脚本文件的编码设置为 UTF-8 ,可以自行更改脚本代码,选择和文本文档一致的编码方式即可。
如何查看当前txt文件使用的是什么编码?
右键点击文本文件,选择 “用记事本打开”,在记事本中,点击菜单栏的 “文件” -> “另存为”,在保存对话框中,查看 “编码” 下拉菜单的当前选项。如果文件是以 UTF-8 编码保存的,这里会显示 “UTF-8”;如果文件是以 ANSI 编码保存的,这里会显示 “ANSI”,其他编码同理。
有问题欢迎留言讨论