我有一堆文件说,
我想删除所有文件名的最后3个字符,我正在使用此脚本
@echo off
setlocal enabledelayedexpansion
set X=3
for %%f in (*) do if %%f neq %~nx0 (
set "filename=%%~nf"
set "filename=!filename:~,-%X%!"
ren "%%f" "!filename!%%~xf"
)
popd
pause
当输出文件名不同时,这将完美运行。但是,在上面的情况下,所有文件都将输出为xxx.txt
,并且脚本会抛出错误
“存在重复的文件名,或找不到该文件”。
有没有办法调整这个,以便重命名重复文件,编号1,2,3 ......?
不幸的是我无法安装任何其他软件。
答案 0 :(得分:2)
@echo off
setlocal EnableDelayedExpansion
set X=3
for /F "delims=" %%f in ('dir /A:-D /B') do if "%%f" neq "%~NX0" (
set "filename=%%~Nf"
set "filename=!filename:~,-%X%!"
if exist "!filename!%%~Xf" call :getNewName "%%~Xf"
ren "%%f" "!filename!%%~Xf"
)
popd
pause
goto :EOF
:getNewName ext
set i=0
:nextNum
set /A i+=1
if exist "%filename%%i%%~1" goto nextNum
set "filename=%filename%%i%"
exit /B
重命名文件时不应使用普通for %%f
命令。根据新名称在原始名称列表中的位置,for %%f
可能会再次处理它们。始终使用for /F
进行重命名。