您好,我想知道有没有办法替换父文件夹中的多个文件名?
我可以使用下面的命令重命名多个文件,但我必须先访问每个文件夹才能重命名多个文件。
dir .\* -include ('*.mp4','*.srt') | Rename-Item -NewName { $_.Name -replace '\[','' -replace '\]','' }
我试图将 dir .\*
替换为 dir .\**\*
以从父文件夹中选择,但没有成功。
我错过了什么?
最佳答案
您可以通过将 -Recurse
开关添加到 Get-ChildItem
(dir 是 Get-ChildItem 的别名)来做到这一点。
搜索包含方括号的文件时,需要使用-LiteralPath
参数。
此外,请注意,如果您将结果直接通过管道传输到 Rename-Item
..
这样做时,Get-ChildItem
可能会再次获取已经处理过的文件,这当然会浪费时间,因此您可以这样做:
$rootFolder = 'X:\WhereTheFilesAre'
(Get-ChildItem -LiteralPath $rootFolder -Include '*.mp4','*.srt' -File -Recurse) |
Rename-Item -NewName { $_.Name -replace '\[|]' }
或
$rootFolder = 'X:\WhereTheFilesAre'
$files = Get-ChildItem -LiteralPath $rootFolder -Include '*.mp4','*.srt' -File -Recurse
foreach ($file in $files) {
$file | Rename-Item -NewName { $file.Name -replace '\[|]' }
}
https://stackoverflow.com/questions/68784226/