我需要在Windows PowerShell中一次重命名一堆文件。 我在这里阅读HTG的文章,这有一点帮助。
我的问题是,它只会重命名目录顶部的文件,没有更深的。 例如:有FOLDER A,FOLDERA内部是文件和FOLDER B,FOLDER B内部是另一个文件。 两个文件夹和两个文件都需要重新命名。 现在它的工作方式是,文件夹A,文件夹A中的文件和文件夹B正在重命名,但不是文件夹B中的文件。
我目前的代码是:
Dir | Rename-Item –NewName { $_.name –replace “ “,”_” }
谢谢您的帮助!
你需要在Dir中指定-Recurse
参数来让它递归,比如:
Dir -recurse | Rename-Item -NewName {$_.Name -replace ' ','_'}
顺便说一句,这可能会遇到一个问题,因为你重命名文件夹(FOLDERB),其中包含文件首先,但管道项目对应于文件在FOLDERB仍然有旧名称。 在这种情况下,你想从下往上重命名。 一个非常粗糙但有效的(我认为)这样做的方法是按文件项的路径长度降序排序,例如:
Dir -recurse | Sort {$_.FullName.Length} -Desc | Rename-Item {$_.Name -replace ' ','_'}