问题描述
来自文件名:1ab12345_def7890.txt
到1AB12345_def7890.txt
。请注意大写的1AB。
我尝试了以下操作,但是它将整个文件名重命名为大写,包括扩展名。
@echo off
setlocal enableDelayedExpansion
pushd c:\some_dir
for %%f in (*) do (
set "filename=%%~f"
for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
set "filename=!filename:%%A=%%A!"
)
ren "%%f" "!filename!" >nul 2>&1
)
endlocal
有人可以帮我吗?
谢谢!
解决方法
您只需要首先隔离文件名的前三个字符,执行替换,然后将其重新添加回字符串即可。
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
PushD "C:\some_dir" 2> NUL || GoTo :EOF
For %%G In (*) Do (Set "filename=%%~nG"
SetLocal EnableDelayedExpansion
Set "leading=!filename:~,3!"
For %%H In (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
) Do Set "leading=!leading:%%H=%%H!"
Ren "%%G" "!leading!!filename:~3!%%~xG" 1> NUL
EndLocal)
PopD