You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell将文件夹重命名为小写,特殊字符名称场景现有方案失效如何解决

解决方案

问题根因

代码运行失效的核心原因是PowerShell中Rename-Item的默认-Path参数支持通配符解析,[]属于PowerShell内置通配符语法,当文件夹名包含方括号时,-Path会把方括号内容解析为通配符匹配规则,无法定位到实际的目标文件夹。

修正方案

将所有路径传递改为使用-LiteralPath参数,该参数不会解析任何通配符,会原样识别路径中的所有特殊字符。同时递归场景下需要先处理深层子文件夹,再处理上层父文件夹,避免上层改名后下层路径失效。

非递归版本(仅处理当前目录下的文件夹)

Get-ChildItem -Directory -LiteralPath . | ForEach-Object {
    $NName = $_.Name.ToLowerInvariant()
    $TempItem = Rename-Item -LiteralPath $_.FullName -NewName "x$NName" -PassThru
    Rename-Item -LiteralPath $TempItem.FullName -NewName $NName
}

递归版本(处理当前目录及所有子层级文件夹)

# 递归获取所有包含大写字母的文件夹,按路径倒序保证先改深层目录
Get-ChildItem -Recurse -Directory -LiteralPath . | 
    Where-Object { $_.Name -CMatch "[A-Z]" } |
    Sort-Object FullName -Descending |
    ForEach-Object {
        $NName = $_.Name.ToLowerInvariant()
        $TempItem = Rename-Item -LiteralPath $_.FullName -NewName "x$NName" -PassThru
        Rename-Item -LiteralPath $TempItem.FullName -NewName $NName
    }

注意事项

  • 正式执行前可以在Rename-Item末尾添加-WhatIf参数,仅输出模拟改名结果,确认逻辑符合预期后再移除-WhatIf实际执行
  • 临时命名前缀x不会和原名称的特殊字符产生冲突,-LiteralPath会原样处理所有字符

内容的提问来源于stack exchange,提问作者Lhakryma DL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:54:04