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

如何递归处理子文件夹?批量移除1TB数据的文件名与文件夹名空格

解决PowerShell递归移除文件和文件夹名称空格的问题

嘿,我明白你的问题了——当前代码只能处理顶层的文件和文件夹,没法深入子目录对吧?别担心,调整几个参数再注意下处理顺序就能搞定。

首先说说你现有代码的局限:Get-ChildItem默认只遍历目标路径的顶层内容,没有递归逻辑;而且如果同时处理文件和文件夹,可能会因为文件夹先改名导致后续文件的路径失效,所以得分开处理,还要注意处理顺序。

步骤1:递归处理所有文件

先搞定所有子目录里的文件,用-File指定只操作文件,-Recurse让PowerShell深入所有子文件夹:

Get-ChildItem -Path "C:\users\admin2\desktop\ProjectTest" -File -Recurse | Rename-Item -NewName { $_.Name -replace ' ','' }

这个命令会遍历目标路径下所有层级的文件,把每个文件名里的空格替换成空字符串。

步骤2:从最深层开始处理文件夹

处理文件夹要特别注意:必须从最底层的子文件夹开始往上改,不然先改上层文件夹名字的话,下层文件夹的路径会失效,PowerShell就找不到它们了。我们可以用Sort-Object按文件夹深度倒序排序,确保最深的文件夹先被重命名:

Get-ChildItem -Path "C:\users\admin2\desktop\ProjectTest" -Directory -Recurse | 
    Sort-Object { $_.FullName.Split('\').Count } -Descending | 
    Rename-Item -NewName { $_.Name -replace ' ','' }

这里-Directory指定只操作文件夹,Sort-Object通过拆分路径的分隔符数量判断文件夹深度,-Descending让最深的文件夹排在前面优先处理。

安全测试小技巧

实际执行重命名前,你可以加上-WhatIf参数预览操作效果,不会真的修改文件名,避免误操作:

# 预览文件重命名
Get-ChildItem -Path "C:\users\admin2\desktop\ProjectTest" -File -Recurse | Rename-Item -NewName { $_.Name -replace ' ','' } -WhatIf

# 预览文件夹重命名
Get-ChildItem -Path "C:\users\admin2\desktop\ProjectTest" -Directory -Recurse | 
    Sort-Object { $_.FullName.Split('\').Count } -Descending | 
    Rename-Item -NewName { $_.Name -replace ' ','' } -WhatIf

确认预览结果符合预期后,再去掉-WhatIf执行实际操作就好。

内容的提问来源于stack exchange,提问作者K.Sutton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:13:09