Windows批处理文件:如何移除文件的第一个扩展名?
Windows批处理移除文件第一个扩展名的简洁方法
要批量移除目录下所有文件的第一个扩展名(比如将1.txt.png改为1.png、abc.def.ghi改为abc.ghi),直接用rename *.txt.png *.png这类命令通用性差,且无法适配任意第一个扩展名的场景。这里提供一个简洁通用的批处理实现:
@echo off setlocal enabledelayedexpansion for %%f in (*.*.*) do ( for /f "delims=." %%a in ("%%~nf") do ( rename "%%f" "%%a%%~xf" ) ) endlocal
命令说明
@echo off:关闭命令行冗余输出,让执行过程更整洁setlocal enabledelayedexpansion:开启延迟环境变量扩展,确保循环内变量能即时生效for %%f in (*.*.*):遍历当前目录下所有包含至少两个扩展名的文件(即文件名含至少两个.)for /f "delims=." %%a in ("%%~nf"):将文件的主名(如1.txt)按.分割,提取第一个部分(如1)rename "%%f" "%%a%%~xf":将原文件重命名为「第一部分主名 + 原文件最后一个扩展名」的形式
优势
相比你提到的两种方法,这个实现:
- 无需多次执行
rename命令,一次循环完成所有操作 - 不依赖固定长度的问号通配符,适配任意长度的第一部分主名和第一个扩展名
- 通用性强,不管文件名包含多少个
.,都能准确移除第一个扩展名
注意:如果重命名后出现文件名冲突(比如
1.txt.png和1.doc.png重命名后都是1.png),命令会报错并跳过冲突文件,需提前处理这类情况。
内容的提问来源于stack exchange,提问作者tecdoc ukr net
相关产品推荐
相关产品推荐

