如何在批处理文件中生成输出文件的自动编号?

时间:2015-11-08 19:18:06

标签: windows batch-file rename file-rename

我有一堆文件说,

  • xxx111.txt
  • xxx112.txt
  • xxx113.txt

我想删除所有文件名的最后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 ......?

不幸的是我无法安装任何其他软件。

1 个答案:

答案 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进行重命名。