使用PowerShell批量重命名TXT文件:仅保留文件名中的ID
PowerShell批量提取TXT文件名中[]内ID并重命名
先做安全测试(必看!)
新手第一步一定要先测试,别直接改文件。运行下面的命令,只会输出拟重命名的文件列表和预期新名称,不会实际修改:
Get-ChildItem -Path "你的目标文件夹路径" -Recurse -Filter "*.txt" | ForEach-Object { if ($_.BaseName -match '\[(.*?)\]') { $newName = "$($matches[1]).txt" Write-Host "原路径: $($_.FullName) → 新文件名: $newName" } else { Write-Host "跳过(无ID格式): $($_.FullName)" } }
把你的目标文件夹路径替换成实际路径,比如D:\MyBigFolder。
执行实际重命名
确认测试结果完全符合预期后,再用下面的命令操作。注意先保留-WhatIf预览,没问题再删掉它:
Get-ChildItem -Path "你的目标文件夹路径" -Recurse -Filter "*.txt" | ForEach-Object { if ($_.BaseName -match '\[(.*?)\]') { $newFullPath = Join-Path -Path $_.DirectoryName -ChildPath "$($matches[1]).txt" # 检查是否已有同名文件,避免覆盖 if (-not (Test-Path -Path $newFullPath)) { Rename-Item -Path $_.FullName -NewName $newFullPath -WhatIf # 预览正确后,删除上面的 -WhatIf 再执行真实重命名 } else { Write-Warning "已存在同名文件,跳过: $($_.FullName)" } } else { Write-Host "无匹配ID,跳过: $($_.FullName)" } }
几个重要细节
-Recurse参数会自动遍历所有子文件夹里的TXT文件- 正则
\[(.*?)\]是非贪婪匹配,只会提取第一对[]里的内容(如果文件名有多个[]的话) - 用
Join-Path拼接完整路径,保证重命名后的文件还在原文件夹里 - 内置了重复文件名检测,不会不小心覆盖已有文件
内容的提问来源于stack exchange,提问作者bden16
相关产品推荐
相关产品推荐

