我使用以下代码批量更改了一个文件夹中的一个扩展名。
Dir *.mkv | rename-item -newname { $_.name -replace ".mkv",".vlc" }
我想要的是能够拥有一行代码,
将所有文件扩展名类型更改为一个文件扩展名
包括子文件夹中的文件
在此方面的任何帮助将不胜感激,谢谢
答案 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