PowerShell中如何修改文件夹名称?求Rename-Item正确语法
PowerShell文件夹重命名:截取Basename前10位的正确实现
修正后的完整代码
$AllDir = Get-ChildItem -LiteralPath E:\ -Recurse -Directory | Where-Object { $_.FullName.Length -ge 95 } # 先处理深层子目录,避免父目录重命名后路径失效 $AllDir = $AllDir | Sort-Object { $_.FullName.Length } -Descending foreach($dir in $AllDir) { if ($dir.BaseName.Length -ge 44) { # 截取Basename前10位,两种写法效果一致,选更简洁的Substring $NewName2 = $dir.BaseName.Substring(0, 10) # $NewName2 = ($dir.BaseName[0..9] -join '') # 核心:正确的Rename-Item语法 # -LiteralPath 确保特殊字符路径被正确解析,-WhatIf 用于测试(可选) Rename-Item -LiteralPath $dir.FullName -NewName $NewName2 -WhatIf } }
关键语法说明
- 指定原路径:必须用
$dir.FullName传入文件夹的完整路径,搭配-LiteralPath参数可以避免路径包含空格、方括号等特殊字符时的解析错误。 - 设置新名称:
-NewName只需要传入新的文件夹名称(不需要完整路径),PowerShell会自动在原父目录下完成重命名。 - 截取字符的优化:
Substring(0,10)比[0..9] -join ''更直观高效,两者都能得到前10位字符的结果。
实用注意事项
- 测试阶段添加
-WhatIf参数,不会实际修改文件夹,仅输出预期执行结果,确认无误后再移除该参数。 - 如果目标目录存在同名文件夹,重命名会失败,可添加
-Force参数强制覆盖,但需谨慎操作。 - 递归遍历重命名时,先通过
Sort-Object { $_.FullName.Length } -Descending处理深层子目录,避免父目录重命名后子目录路径失效。
内容的提问来源于stack exchange,提问作者Talcom
相关产品推荐
相关产品推荐

