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

能否用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:25:53