首页 > 解决方案 > 使用 PowerShell 在目录和子文件夹中使用给定名称重命名批量文件

问题描述

我正在寻找一种解决方案来重命名目录和子文件夹中具有给定名称的所有文件。

例如,有一个名为的目录c:\blah,在此文件夹中,有一个名为的文件BaR.txt和一个名为 foo 的文件夹。在foo文件夹中,还有一个名为bAr.txt. 我想找到所有带有名称bar.txt的文件并将每个文件的名称更改为“neo.txt”。还必须可以将文件重命名为小写,例如bar.txt. 到目前为止,我已经尝试在 Windows10 中使用 Windows 资源管理器手动执行此操作,但由于某些奇怪的原因,当我尝试重命名批量文件时,每个文件名的末尾都添加了额外的“(1)”符号。我尝试使用 PowerShell 并创建了一个命令

$_.name -replace 'bar.txt','neo.txt'  

但这对我不起作用。

标签: powershell

解决方案


为此,您需要 2 个 cmdlet:Get-ChildItemRename-Item.

这应该有效:

Get-ChildItem -Path 'C:\Blah' -Filter 'bar.txt' -Recurse | ForEach-Object {
    Rename-Item -Path $_.FullName -NewName 'neo.txt'
}

但是,如果foo文件夹内有更多子文件夹,则此代码将重命名bar.txt它在所有这些子文件夹中找到的所有名为(不区分大小写)的文件。

如果您不想比第一个子文件夹更深C:\Blah(称为foo),您可以使用-Depth命令中的参数,如下所示:

Get-ChildItem -Path 'C:\Blah' -Filter 'bar.txt' -Recurse -Depth 1 | ForEach-Object {
    Rename-Item -Path $_.FullName -NewName 'neo.txt'
}

推荐阅读