需求:一个文件夹里面的长文件名需要改名,只保留文件名的前20位,文件扩展名保留原jpg格式。
一.更名脚本:
@echo off
setlocal enabledelayedexpansion
rem 设置要重命名的文件夹路径
set "folder=C:\test"
rem 进入指定文件夹
cd /d "%folder%"
rem 遍历文件夹中的所有文件
for %%f in (*) do (
rem 获取文件名和扩展名
set "filename=%%~nf"
set "extension=%%~xf"
rem 获取新的文件名(前10位)
set "newname=!filename:~0,10!%%extension%%"
rem 重命名文件
ren "%%f" "!newname!"
)
endlocal
二.执行结果失败
但是执行修改修改不成功:
1.文件排除:开始使用 for %%f in (*) ,结果把所有非jpg格式的都修改掉了,改成 for %%f in (*.jpg)
2.扩展名获取不到:开始用%%~xa 和 %%~na都无法获取,后来使用 set "extension=%%~xf"才搞定。两者区别:
%%~xa:用于获取变量 %%a 的文件扩展名。这里的 x 表示扩展名,例如如果 %%a 是 file.txt,那么 %%~xa 将返回 .txt。
%%~na %%~xf:这个组合则是分开获取文件的名称和扩展名。
%%~na:获取变量 %%a 的文件名(不包括扩展名)。
%%~xf:获取变量 %%a 的扩展名(包括点)
三.成功运行的脚本:
@echo off
setlocal enabledelayedexpansion
rem 设置要重命名的文件夹路径
set "folder=C:\test"
rem 进入指定文件夹
cd /d "%folder%"
rem 遍历文件夹中的所有文件
for %%f in (*.jpg) do (
rem 获取文件名和扩展名
set "filename=%%~nf"
set "extension=%%~xf"
rem 获取新的文件名(前10位)
set "newname=!filename:~0,20!!extension!"
rem 重命名文件
ren "%%f" "!newname!"
)
endlocal