能否用Windows命令提示符移除文件名末尾两位字符并修改扩展名?
Windows CMD批量重命名:改扩展名+移除文件名末尾两字符
为啥你用rename *_?.OUT *.txt没效果?
Windows自带的rename命令通配符逻辑有点“死板”:
- 你写的
*_?.OUT里,*会匹配文件名开头到_?之前的所有内容,_?对应末尾的两个字符(比如_1) - 目标里的
*.txt本应该把*替换成前面匹配到的内容,但实际用的时候可能踩坑:- 如果文件名中间也有
_数字的结构,*会匹配到第一个_数字之前的内容,导致截断错误 - 部分老版本Windows对这种复杂通配符的解析有问题
- 要是文件名里有空格或特殊字符,通配符匹配容易出错
- 如果文件名中间也有
所以这个命令不是百分百靠谱,换用循环的方法更稳妥。
靠谱的实现方法
用CMD的for循环(推荐)
直接在命令提示符里输入这段命令:
for %f in (*_?.OUT) do ( set "filename=%~nf" setlocal enabledelayedexpansion ren "%f" "!filename:~0,-2!.txt" endlocal )
拆解一下:
%~nf提取不带扩展名的文件名(比如把INF_CAN1_Knees_Top_T209_1.OUT变成INF_CAN1_Knees_Top_T209_1)!filename:~0,-2!把文件名砍掉最后两个字符(去掉_1/_2)enabledelayedexpansion是为了让循环里的变量能实时更新,不然会出问题
如果是写在批处理文件(.bat)里,把所有的%改成%%就行:
@echo off setlocal enabledelayedexpansion for %%f in (*_?.OUT) do ( set "filename=%%~nf" ren "%%f" "!filename:~0,-2!.txt" ) endlocal
极端情况的精准匹配
要是你确定所有要改的文件都是[文件名]_数字.OUT的格式,也可以试试这个简化的rename命令(要是之前没生效,大概率是文件名结构不符合预期):
rename *_?.OUT *.txt
比如INF_CAN1_Knees_Top_T209_1.OUT会被匹配成*对应INF_CAN1_Knees_Top_T209,_?对应_1,最终改成INF_CAN1_Knees_Top_T209.txt。
内容的提问来源于stack exchange,提问作者Orbit
相关产品推荐
相关产品推荐

