Windows CMD中使用通配符批量重命名文件的方法
嘿,我懂你遇到的痛点了——CMD自带的ren命令用通配符替换文件名中间的片段确实不好使,因为它的通配符逻辑只能匹配文件名的前缀或后缀,没法直接对中间的文本做替换。下面给你两个实用的解决方案,按需选择:
方法1:用CMD的for循环实现精准替换
CMD本身没有原生的字符串替换重命名功能,但可以通过for循环结合延迟变量扩展来实现。假设你要把文件名里的regular-exp替换成new-exp,按以下步骤操作:
- 打开CMD,进入目标文件所在的目录
- 先开启延迟环境变量扩展(这一步很关键,否则变量替换会失效):
setlocal enabledelayedexpansion - 执行下面的循环命令:
for /f "delims=" %f in ('dir /b *regular-exp*') do ( set "oldname=%f" set "newname=!oldname:regular-exp=new-exp!" ren "!oldname!" "!newname!" )
注意事项:
- 如果你是把这段代码写到**批处理文件(.bat/.cmd)**里运行,要把命令里的
%f改成%%f dir /b参数只会输出纯文件名,不会带路径,确保只处理当前目录的文件- 替换的字符串要和文件名里的内容完全匹配(默认CMD不区分大小写,若需严格区分可调整变量扩展规则)
方法2:用PowerShell实现(更简单直观)
如果觉得CMD的写法太繁琐,PowerShell的字符串替换功能会更顺手,命令也更简洁。操作步骤:
- 打开目标文件夹,右键选择「在终端中打开」(或者直接搜索打开PowerShell,然后用
cd命令切换到目标目录) - 执行以下命令:
Get-ChildItem *regular-exp* | Rename-Item -NewName { $_.Name -replace 'regular-exp', 'new-exp' }
额外技巧:
- 如果你想先预览效果,不想直接修改文件名,可以加
-WhatIf参数,这样只会显示将要执行的重命名操作,不会实际更改:Get-ChildItem *regular-exp* | Rename-Item -NewName { $_.Name -replace 'regular-exp', 'new-exp' } -WhatIf - 如果需要正则表达式匹配(比如替换符合某种模式的片段),直接把
'regular-exp'换成正则表达式即可,PowerShell的-replace原生支持正则
内容的提问来源于stack exchange,提问作者Said Hassan
相关产品推荐
相关产品推荐

