PowerShell按文件首行重命名文本文件遇非法字符报错求助
PowerShell批量重命名文件时处理非法字符方案
直接修改你的代码,核心是过滤Windows文件名里的非法字符——系统禁止的字符包括\ / : * ? " < > |,把这些字符替换成合法内容就能解决报错问题。
修改后的完整代码:
$files = Get-ChildItem *.txt $file_map = @() foreach ($file in $files) { # 获取文件首行,同时去掉首尾多余空格 $firstLine = (Get-Content $file.Fullname -First 1).Trim() # 把所有非法字符替换成下划线(想直接删除就把'_'换成'') $safeFileName = $firstLine -replace '[\\/:*?"<>|]', '_' $file_map += @{ OldName = $file.Fullname NewName = "{0}.txt" -f $safeFileName } } # 执行重命名,同时忽略极少数可能的错误(比如重名) $file_map | ForEach-Object { Rename-Item -Path $_.OldName -NewName $_.NewName -ErrorAction SilentlyContinue }
关键调整说明:
- 清理首尾空白:用
.Trim()处理首行,避免文件名前后带空格引发的异常 - 过滤非法字符:正则表达式
[\\/:*?"<>|]精准匹配所有非法字符,替换为下划线(也可以直接删除) - 容错处理:
-ErrorAction SilentlyContinue能跳过重名这类小概率错误,避免批量操作中断
额外小技巧:
- 怕重名的话,可以加个判断逻辑,给重复的文件名自动加序号(比如
文件名_1.txt) - 执行重命名前,可以先打印映射关系确认:在
foreach里加Write-Host "原文件:$($file.Name) → 新文件名:$safeFileName.txt"
内容的提问来源于stack exchange,提问作者eera5607
相关产品推荐
相关产品推荐

