我在网上搜索,找不到我正在寻找的确切代码......我发现的东西非常相似,却没有让它们起作用。这是我想要的大概:
int i = 1;
FOR (i; i < 9999; i++)
IF EXIST filename.log THEN
REN filename%i%.log
ELSE IF EXIST filename%i%.log THEN
REN filename%(i+1)%.log
基本上我想检查文件名是否存在,如果存在,则将其重命名为filename0001 - 从那里开始,每次运行批处理时,如果找到文件名####,则在此之后将其重命名为1。所以当然在第一次运行之后,当它发现文件名存在时,它会将它重命名为filename0002,依此类推。
谢谢!
答案 0 :(得分:3)
编辑以回应评论。还添加了测试以确保debug.log存在。不想不必要地重命名文件
第一个解决方案总是将最新的日志作为debug.log,下一个最新的作为debug0001.log,下一个作为debug0002.log等。最旧的日志将具有最高的数字。
@echo off
setlocal enableDelayedExpansion
set "base=debug"
if exist "%base%.log" for /f "eol=: delims=" %%F in (
'dir /b /o-n "%base%*.log" ^| findstr /rix /c:"%base%.log" /c:"%base%[0-9][0-9][0-9][0-9].log"'
) do (
set "name=%%~nF"
set /a "n=10000!name:*%base%=! %% 10000 + 1"
ren "%%F" "%base%!n!.log"
)
要使最旧的日志具有0001且最新的日志具有最高编号,则需要进行小的更改。只需要重命名一次。
@echo off
setlocal enableDelayedExpansion
set "base=debug"
if exist "%base%.log" for /f "eol=: delims=" %%F in (
'dir /b /o-n "%base%*.log" ^| findstr /rix /c:"%base%.log" /c:"%base%[0-9][0-9][0-9][0-9].log"'
) do (
set "name=%%~nF"
set /a "n=10000!name:*%base%=! %% 10000 + 1"
ren "%base%.log" "%base%!n!.log"
goto :break
)
:break