首页 > 解决方案 > 使用 powershell 重命名父母

问题描述

我有 C:\test1\test2\test3\test4\test5\test6\test7\test8

我需要重命名从最后一个(test8)到第一个(test1)的路径的每个文件夹。我必须在具有最大长度名称的 Windows 10 文件夹上进行测试,为此我需要先更改最后一个文件夹的名称(test8),然后再更改其父文件夹(test7)。

我有这个功能

[CmdletBinding()]
param(
    [string]$path
)


function createFolderStructure{

        $parentName = "F:\"
        $name = "ThisFolderHas256Characters_ThisFolderHas256Characters_"+
                "ThisFolderHas256Characters_ThisFolderHas256Characters_"+
                "ThisFolderHas256Characters_ThisFolderHas256Characters_"+
                "ThisFolderHas256Characters_ThisFolderHas256Characters_"+
                "ThisFolderHas256Characters_ThisFolderHas"

        for ($i=0; $i -lt 10; $i++){
            $parentName += "test\";
            New-Item "$parentName" -ItemType Directory;
        }

        Get-ChildItem -Path "F:\test" -Recurse -Force | ForEach-Object{
                Rename-Item -Path $_.fullname -NewName $name
            }
     }



createFolderStructure

但我不知道如何让它从底部到顶部元素。正如我所拥有的那样,它不起作用,因为它从第一个文件夹到最后一个文件夹,并且在第二个文件夹上,我得到了 name too long for path 的异常。任何想法??

标签: powershellrename

解决方案


您可以使用函数递归地执行此操作。我认为您可能需要缩短 $name 变量:

Function Rename-Folders {
param([string]$path)

$name = "ThisFolderHas256Characters_ThisFolderHas256Characters_"+
                "ThisFolderHas256Characters_ThisFolderHas256Characters_"+
                "ThisFolderHas256Characters_ThisFolderHas256Characters_"+
                "ThisFolderHas256Characters_ThisFolderHas256Characters_"+
                "ThisFolderHas256Characters_ThisFolderHas"

if ($path -match "$($path | split-path -qualifier)\\?$") {
return
}
Get-Item -path $path | Rename-Item -NewName $name
Rename-Folders -path ($path | split-path)
}

$path = "F:\test1\test2\test3\test4"
Rename-Folders $path

推荐阅读