我有很多文件夹要使用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文件。
答案 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
}
}
您有多个级别的子文件夹吗?这很可能是因为您不能重新命名,因为项目不存在'错误,因为您已经重命名了父文件夹。如果是这样的话,那么你需要更复杂的东西。