PowerShell批量重命名脚本处理é等特殊字符时出现乱码如何解决
问题原因
你遇到的乱码是字符编码不匹配导致的,café转换为café是典型的UTF-8编码文本被误以ANSI编码读取的表现:
- 你保存文件名列表的
names.txt是UTF-8编码格式 - Windows系统自带的PowerShell 5.1及更早版本,默认使用系统本地ANSI编码读取文本文件,不会自动识别UTF-8编码,所以特殊字符读取后就会出现乱码
- 该问题和你替换的
Path/LiteralPath参数无关,所以修改后无法解决问题
可行解决方案
方案1:给Get-Content指定读取编码(最简便,无需改动环境)
只需要在读取txt文件的命令后加-Encoding UTF8参数,明确告知PowerShell用UTF-8编码读取文件即可,修改后的完整脚本如下:
# 读取文件名时指定UTF-8编码 $names = Get-Content -Path "C:\Users\user1\OneDrive\Desktop\locationForNames\names.txt" -Encoding UTF8 $files = Get-ChildItem -Path "C:\Users\user1\OneDrive\Desktop\filesToRename" for($i = 0; $i -lt $names.Length; $i++){ $newname = $names[$i] Rename-Item $files[$i].FullName -NewName $newname -Force }
补充说明:如果你的
names.txt是用Windows记事本默认保存的ANSI编码,把上述参数改为-Encoding Default即可。你可以通过记事本打开txt文件→「文件」→「另存为」,查看底部的编码下拉框确认文件实际编码。
方案2:升级到PowerShell 7.x(适合长期使用PowerShell的场景)
PowerShell 7及以上的新版本默认所有文本读写操作都采用UTF-8编码,无需额外指定编码参数也不会出现这类乱码问题,兼容性和功能也比旧版本更强。
附加注意事项
你当前的脚本是按照文件列表的索引顺序一一对应重命名,运行前请确认:
names.txt的行数和待重命名文件夹内的文件总数完全一致- 待重命名文件夹内的文件排序和
names.txt里的文件名顺序完全匹配
避免出现下标越界、重命名错位的问题。
内容的提问来源于stack exchange,提问作者CoffeeQuest
相关产品推荐
相关产品推荐

