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

关于PowerShell批量替换含子文件夹的文件/文件夹名称中指定字符的问题咨询

关于PowerShell批量替换含子文件夹的文件/文件夹名称中指定字符的问题咨询

嗨,我看你正在折腾用PowerShell批量处理近10000个文件(包括多级子文件夹里的),要把文件名里的#替换成(hash)对吧?先给你理理当前的情况和可以优化的地方:

首先你的需求很明确:

  • 目标路径:C:\Users\JHB Laptop\Documents\test,包含多级子文件夹(比如New folder1\New folder2\...\New folder5)
  • 操作:把所有文件、文件夹名称中的#替换为(hash)

你现在用的这段代码:

cd "C:\Users\JHB Laptop\Documents\test"

# by default, -replace is case-insensitive (equivalent to -ireplace)
# for case-sensitive, use -creplace
Dir | Rename-Item –NewName { $_.name –replace "#","(hash)" }

确实能工作,但有个小局限——默认的Dir(也就是Get-ChildItem)只会遍历当前目录下的文件和文件夹,不会深入到子文件夹里去。如果你要处理所有层级的内容,得加上-Recurse参数。

给你调整后的代码,更适合你的需求:

# 切换到目标目录
Set-Location "C:\Users\JHB Laptop\Documents\test"

# 递归遍历所有文件和文件夹,模拟替换名称中的#为(hash)
Get-ChildItem -Recurse | Rename-Item –NewName { $_.Name –replace "#","(hash)" } -WhatIf

这里特意加了-WhatIf参数,它会帮你模拟所有重命名操作,不会实际修改文件名。你可以先运行这段代码,看看输出的修改项是不是符合你的预期,确认没问题后,再把-WhatIf去掉,执行实际的重命名操作。

另外还有几个小提醒:

  • 如果遇到权限不足或者文件被占用的情况,重命名可能会失败,你可以考虑加上-ErrorAction SilentlyContinue来忽略错误,但建议先排查具体的失败原因,避免遗漏重要文件
  • -replace是基于正则表达式的,好在#不是正则特殊字符,所以直接用就行;如果以后要替换.、*这类特殊字符,记得用反斜杠转义,比如\-replace "\.", "dot"

备注:内容来源于stack exchange,提问作者lwaxg10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:03:14