【问题标题】:Is there one line of code for changing all folders and sub folders file extensions using powershell?是否有一行代码可以使用 powershell 更改所有文件夹和子文件夹的文件扩展名?
【发布时间】:2019-01-02 08:23:12
【问题描述】:

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

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

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

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

  • 在子文件夹中包含文件

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

【问题讨论】:

  • 请参阅 Get-ChildItem 选项。用它来替换'dir'。
  • @user2864740 dir 是 Get-ChildItem 的别名 - 使用专有名称而不是别名是有意义的,但不会有任何实际区别。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    因为你也标记了它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

    【讨论】:

      【解决方案3】:

      我不会更改 ALL 扩展名,只需使用 -Include 并提供一个列表

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

      如果输出看起来没问题,删除结尾的-WhatIf

      【讨论】:

        猜你喜欢
        • 2018-07-28
        • 1970-01-01
        • 2017-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 1970-01-01
        • 2015-10-05
        相关资源
        最近更新 更多