You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell批量将父目录下所有文件和目录的下划线替换为空格?

用PowerShell批量替换目录和文件名中的下划线为空格

需求:将目标父目录下所有子目录及文件名称中的下划线替换为空格,包含各级嵌套的目录与文件。

示例

当前状态

folder_1
-- file_1.mp4
-- file_1.srt
-- file_1.vtt
folder_2
-- file_2.mp4
-- file_2.srt
-- file_2.vtt
folder_3
-- file_3.mp4
-- file_3.srt
file_3.vtt

期望状态

folder 1
-- file 1.mp4
-- file 1.srt
-- file 1.vtt
folder 2
-- file 2.mp4
-- file 2.srt
-- file 2.vtt
folder 3
-- file 3.mp4
-- file 3.srt
-- file 3.vtt

你尝试的命令(仅部分生效)

get-childitem *.* | foreach { rename-item $_ $_.Name.Replace("_", " ") }

get-childitem -recurse | foreach { rename-item $_ $_.name.replace("_"," ") }

最优解决方案

你的命令失效原因是:递归重命名时如果先修改父目录,后续子项的原始路径会失效,导致系统找不到文件。正确逻辑是先处理最深层的子项,再逐层向上处理父目录。

使用以下命令可高效完成需求:

Get-ChildItem -Recurse | Sort-Object -Property FullName -Descending | ForEach-Object {
    $newName = $_.Name.Replace("_", " ")
    if ($newName -ne $_.Name) {
        Rename-Item -Path $_.FullName -NewName $newName -Force
    }
}

命令说明

  • Get-ChildItem -Recurse:遍历当前目录下所有文件和子目录(含嵌套层级)
  • Sort-Object -Property FullName -Descending:按完整路径降序排序,确保先处理最深层子项,避免父目录改名后子项路径失效
  • $_.Name.Replace("_", " "):将当前项名称中的下划线替换为空格
  • if ($newName -ne $_.Name):跳过无需修改的项,提升执行效率
  • -Force:确保重命名可覆盖隐藏文件等特殊情况

如果需要指定目标父目录,只需在Get-ChildItem后添加路径:

Get-ChildItem "C:\你的目标父目录路径" -Recurse | Sort-Object -Property FullName -Descending | ForEach-Object {
    $newName = $_.Name.Replace("_", " ")
    if ($newName -ne $_.Name) {
        Rename-Item -Path $_.FullName -NewName $newName -Force
    }
}

内容的提问来源于stack exchange,提问作者Vidkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:20:04