ren批量替换文件名bat
直接说事。量替用BAT批量替换文件名,换文核心就两条路:一是量替用REN命令配合FOR循环,二是换文用PowerShell混编。很多人卡在“怎么把旧文件名里的量替某段字符换成新的”这一步,其实写对了一行就够。换文 先看最朴素的量替需求:把当前文件夹里所有“草稿”替换成“终稿”。打开记事本,换文粘这段: 存成 有人问:文件名里有空格怎么办? 再说个实际场景。我上个月整理一批截图,文件名是 跑完所有文件都变成了 这样至少不会丢文件。我吃过一次亏,把一批带序号的日志文件前缀去掉后,两个不同目录下的同名文件撞了,直接少了一个。后来养成了习惯:批量重命名前先 另一个高频需求是替换扩展名。比如把 注意这里 有人喜欢用 最后提一个容易忽略的点:BAT文件本身的编码。如果文件名里有中文,记事本存成UTF-8 with BOM,双击后中文会变乱码,替换自然失败。存ANSI或者GBK才行。我习惯用Notepad++,编码菜单里选“ANSI”再保存,从没出过问题。 批量替换文件名这事,BAT够用,但别指望它处理太复杂的规则。超过三层逻辑判断,直接上Python的@echo off setlocal enabledelayedexpansion for %%f in (*草稿*) do 量替( set "name=%%f" set "newname=!name:草稿=终稿!" ren "%%f" "!newname!" ) pauserename.bat,扔进目标文件夹双击。换文注意两点:%%f在批处理里要双百分号,量替!name:草稿=终稿!是换文延迟变量替换,少了setlocal enabledelayedexpansion就废了。量替我第一次写的换文时候忘了开延迟扩展,结果所有文件都提示“系统找不到指定的量替文件”,排查了十分钟才反应过来。ren “%%f” “!newname!”已经加了引号,没问题。但如果文件名带感叹号,延迟扩展会吃掉它。这种极端情况就换PowerShell,别跟BAT死磕。屏幕截图 2024-01-01 123456.png,想把“屏幕截图 ”这个前缀去掉。用上面的模板把“草稿”换成“屏幕截图 ”,把“终稿”换成空字符串——注意,等号后面什么都不写:set "newname=!name:屏幕截图 =!"2024-01-01 123456.png。但这里有个坑:如果两个文件去掉前缀后重名,REN会直接覆盖,且不提示。所以动手前先备份,或者加个判断——if not exist "!newname!" ( ren "%%f" "!newname!" ) else ( echo 跳过:!newname! 已存在 )dir /b > list.txt存个底。.jpeg全改成.jpg。用同样的逻辑:for %%f in (*.jpeg) do ( set "name=%%f" set "newname=!name:.jpeg=.jpg!" ren "%%f" "!newname!" )*.jpeg是通配,%%f拿到的是完整文件名。替换时.jpeg必须带上点,否则可能误伤文件名中间的部分。比如my.jpeg.backup会被改成my.jpg.backup,这倒符合预期,但如果你只想改结尾,得用!name:~0,-5!截断再加新扩展名,更啰嗦。ren *.jpeg *.jpg,一行搞定。但这条命令在Windows不同版本上行为不一致——XP和Win7能跑,Win10某些版本会报错“参数不正确”。我实测Win11 23H2下直接失败。所以还是老老实实写FOR循环稳。os.rename,省心。BAT的优势就是双击即用,不用装环境。写的时候多打几个echo看看变量值,比事后猜哪里出错强得多。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-