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

时间:2019-01-02 08:23:12

标签: powershell batch-file file-extension subdirectory batch-rename

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

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

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

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

  • 包括子文件夹中的文件

在此方面的任何帮助将不胜感激,谢谢

3 个答案:

答案 0 :(得分:4)

使用-Recurse包含子文件夹。使用BaseName,即没有扩展名的文件名。
Read the documentation for more info on either

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

修改

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

  

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

要更改所有文件扩展名,您只需要排除*mkv,但是不建议您LotPings's answer所述;更改您不需要的文件扩展名非常容易。他介绍了使用-Include参数,这是建议的方法,因为它会尽早过滤。

为了显示另一种方法,可以使用Extension属性。这使您可以利用所有PowerShell comparison operators-下面的示例。

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"}

答案 1 :(得分:1)

您也标记了它batch-file

for /r %%a in (*.mkv) do @ECHO ren "%%a" "%%~na.vlc"

(这是批处理文件语法。如果您想直接在命令行上使用它)

for /r %a in (*.mkv) do @ECHO ren "%a" "%~na.vlc"

如果输出符合您的需求,请删除@ECHO

答案 2 :(得分:1)

我不会更改 ALL 扩展名,只需使用-Include并显示列表

Get-ChildItem -Path X:\start\here -Recurse -Include ('*.mkv','*.xyz')| Rename-Item -NewName {$_.BaseName+'.vlc'} -WhatIf

如果输出看起来正常,请删除结尾的-WhatIf