在PowerShell 4.0中重命名带文件名的文件夹

时间:2017-08-29 21:22:24

标签: powershell renaming

我有很多文件夹要使用PowerShell批量重命名。在每个文件夹中都有许多不同的扩展名文件。我想要做的是用* .nfo文件名重命名该文件夹。

示例:

C:\ foldertest \ TEST \ 在此文件夹中,这些文件位于:
JPG.jpg
NFO.nfo
TXT.txt
WAV.wav

运行脚本后,我希望将文件夹重命名为* .nfo:
C:\ foldertest \ NFO \
我需要一个适用于>的解决方案一次1个文件夹。

这就是我所拥有的(不工作o / c):
Get-ChildItem -Path "C:\foldertest\" | Where-Object{$_.PSisContainer} | ForEach-Object -Process { $new1Name = Get-ChildItem $_ -Filter "*.nfo" | Select-Object -ExpandProperty BaseName Rename-Item -Path $_.FullName -NewName ($_.Name -replace $new1Name }

更新: 我还有问题。解决方案(见下文)似乎首先起作用,但有时只是。让我们说30%的文件夹。然后这个错误发生在其余部分:
Rename-Item : Cannot rename because item at 'C:\Users\STOFFES\Desktop\REN\blablablabla' does not exi st. At C:\Users\STOFFES\Desktop\REN\REN.ps1:2 char:3 + Rename-Item (Split-Path $_ -Parent) ($_.BaseName) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

即使大多数文件夹中都有* .nfo文件。

2 个答案:

答案 0 :(得分:0)

也许是这样的?

Get-ChildItem *.nfo -File -Recurse | ForEach-Object {
  Rename-Item (Split-Path $_ -Parent) ([IO.Path]::GetFileNameWithoutExtension($_.Name)) -WhatIf
}

由于-File参数,需要PowerShell 3+。准备好后删除-WhatIf

(旁白:PowerShell 3.0及更高版本中不再需要您在命令中使用的Where-Object过滤器,因为它具有-File-Directory参数。)

答案 1 :(得分:0)

Get-ChildItem -Path "E:\Test\Rename" -Include "*.nfo" -Recurse | 
ForEach-Object {
    $oldFolder = $_.DirectoryName

    # New Folder Name is .nfo Filename, excluding extension
    $newFolder = $_.Name.Substring(0, $_.Name.Length - 4)

    # Verify Not Already Same Name
    if ($_.BaseName.ToUpper() -ne $newFolder.ToUpper()) {
        Write-Host "Rename: $oldFolder To: $newFolder"

        Rename-Item -NewName $newFolder -Path $oldFolder
    }
}

您有多个级别的子文件夹吗?这很可能是因为您不能重新命名,因为项目不存在'错误,因为您已经重命名了父文件夹。如果是这样的话,那么你需要更复杂的东西。