如何从父文件夹重命名powershell中的多个文件?
您好,我想知道有没有办法从父文件夹中替换多个文件名?
我能够使用下面的命令重命名多个文件,但我必须首先访问每个文件夹才能重命名多个文件。
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 '[|]' }
}
- @SantiagoSquarzon 好吧......你只是不需要逃避它。试试 `[regex]::Escape('[]')`,你会发现只有开始的方括号会被转义:``[]``。如果您使用像``-replace '[[]]'`` 这样的字符列表,您 **DO** 需要对两者进行转义
- 太棒了,你不需要正则表达式中的第二个转义“”。很简单,但我不知道...