【问题标题】:Renaming Files with PowerShell使用 PowerShell 重命名文件
【发布时间】:2025-12-22 12:10:17
【问题描述】:

我需要在 Windows PowerShell 中一次重命名一堆文件。我阅读了 HTG 文章 here 并有所帮助。

我的问题是它只会重命名目录顶部的文件,没有更深的内容。例如:有 FOLDER A,FOLDERA 里面是一个文档,FOLDER B 里面是另一个文档。两个文件夹和两个文档都需要重命名。它现在的工作方式是正在重命名文件夹 A、文件夹 A 中的文档和文件夹 B,而不是文件夹 B 中的文档。

我当前的代码是:

Dir | Rename-Item –NewName { $_.name –replace “ “,”_” }

感谢您的帮助!

【问题讨论】:

    标签: windows powershell powershell-2.0


    【解决方案1】:

    您需要在 Dir 上指定 -Recurse 参数以使其递归,例如:

    Dir -recurse | Rename-Item -NewName {$_.Name -replace ' ','_'}
    

    顺便说一句,这可能会遇到问题,因为您首先要重命名包含文档的文件夹 (FOLDERB),但与 FOLDERB 中的文件相对应的管道项目仍然具有旧名称。在这种情况下,您想从下往上重命名。一种非常粗略但有效(我认为)的方法是按路径长度降序对文件项进行排序,例如:

    Dir -recurse | Sort {$_.FullName.Length} -Desc | Rename-Item {$_.Name -replace ' ','_'}
    

    【讨论】:

    • 返回错误:重命名项目:无法重命名,因为指定的目标代表路径或设备名称。
    • 误读了您的问题。查看更新后的答案是否解决了您的问题。
    • 我必须运行它不止一次,但最终一切都会好起来的。