如何在批处理文件(非脚本)中用PowerShell重命名文件夹及子文件夹文件?
递归批量重命名文件的解决方案
我来帮你搞定这个递归重命名的需求!你之前的命令只处理了当前文件夹的文件,是因为gci(也就是Get-ChildItem)默认不会遍历子文件夹。只需要加几个参数就能实现递归处理所有子文件夹里的文件。
修改后的完整批处理命令
powershell -Command "Get-ChildItem -Recurse -File | ForEach-Object { Rename-Item -Path $_.FullName -NewName ($_.Name -replace '15June', '01July') }"
关键参数解释
-Recurse: 让Get-ChildItem遍历当前目录以及所有子目录,不会漏掉深层文件夹里的文件-File: 明确只处理文件,避免误操作重命名文件夹(如果不需要排除文件夹,可以去掉这个参数)$_.FullName: 使用文件的完整路径作为Rename-Item的-Path参数,确保即使在子文件夹里也能正确定位文件(只用$_.Name会导致PowerShell在当前目录找文件,引发错误)
测试建议(避免误操作)
如果你想先看看哪些文件会被重命名,不想实际执行修改,可以加上-WhatIf参数,它会输出预期的修改结果但不真的改名:
powershell -Command "Get-ChildItem -Recurse -File | ForEach-Object { Rename-Item -Path $_.FullName -NewName ($_.Name -replace '15June', '01July') -WhatIf }"
小提示
- 命令里的
15June和01July是大小写敏感的,如果需要忽略大小写,可以把替换规则改成($_.Name -replace '(?i)15June', '01July') - 如果你的文件名里有特殊字符,这个命令也能正常处理,PowerShell比原生批处理更擅长处理复杂文件名
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

