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

Windows 如何在批处理文件中生成输出文件的自动编号?,windows,batch-file,rename,file-rename,Windows,Batch File,Rename,File Rename,我有一大堆文件说 xxx111.txt xxx112.txt xxx113.txt 我想删除所有文件名的最后3个字符,我正在使用这个脚本 @回音 延迟扩展 设置X=3 对于%%f in(*)如果%%f neq%%nx0,则执行( 设置“文件名=%%~nf” 设置“文件名=!文件名:~,-%X%!” ren“%%f”“!文件名!%%~xf” ) 邻苯二胺 暂停 当输出文件名不同时,此操作可以完美运行。但是,在上述情况下,所有文件都将输出为xxx.txt,脚本会抛出错误 “存在重复的文件名,

我有一大堆文件说

  • xxx111.txt
  • xxx112.txt
  • xxx113.txt
我想删除所有文件名的最后3个字符,我正在使用这个脚本


@回音
延迟扩展
设置X=3
对于%%f in(*)如果%%f neq%%nx0,则执行(
设置“文件名=%%~nf”
设置“文件名=!文件名:~,-%X%!”
ren“%%f”“!文件名!%%~xf”
)
邻苯二胺
暂停

当输出文件名不同时,此操作可以完美运行。但是,在上述情况下,所有文件都将输出为
xxx.txt
,脚本会抛出错误

“存在重复的文件名,或者找不到该文件”

有没有任何方法可以调整这个,这样重复的文件将被重命名,可能编号为1,2,3

不幸的是,我不能安装任何其他软件

@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
重命名文件时,不应将普通
用于%%f
命令。根据新名称在原始名称列表中的位置,它们可能会被%%f的
再次处理。始终使用
for/F
重命名。

将问题编辑为“请删除”无助于删除问题。请不要破坏邮局。用户贡献是根据许可的。请阅读条款。谢谢
@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