是否有一行代码可以使用 powershell 更改所有文件夹和子文件夹文件扩展名?

0 powershell file-extension batch-file batch-rename subdirectory

我使用以下代码一次批量更改一个文件夹中的一个扩展名。

Dir *.mkv | rename-item -newname { $_.name -replace ".mkv",".vlc" }

我想要的是能够有一行代码

  • 将所有文件扩展名类型更改为一种文件扩展名

  • 在子文件夹中包含文件

对此的任何帮助将不胜感激,谢谢

gms*_*man 5

用于-Recurse包含子文件夹。使用BaseName不带扩展名的文件名。
阅读文档以获取更多信息

Get-ChildItem *.mkv -Recurse | Rename-Item -NewName {"$($_.BaseName).vlc"}
Run Code Online (Sandbox Code Playgroud)

编辑

抱歉,我错过了这一部分:

将所有文件扩展名类型更改为一种文件扩展名

要更改所有文件扩展名,您只需排除*mkv但正如LotPings 的答案所涵盖的那样,不建议这样做;更改您不想要的文件的扩展名非常容易。他介绍了如何使用-Include参数,这是推荐的方式,因为它会在早期进行过滤。

为了展示另一种方式,您可以使用该Extension属性。这允许您利用所有 PowerShell比较运算符- 示例如下。

Get-ChildItem -Recurse | Where-Object {$_.Extension -eq ".mkv"}
Get-ChildItem -Recurse | Where-Object {$_.Extension -in @(".mkv",".avi")}
Get-ChildItem -Recurse | Where-Object {$_.Extension -ne ".vlc"}
Run Code Online (Sandbox Code Playgroud)