0

我在网上搜索并找不到我正在寻找的确切代码......我发现了非常相似但没有让它们工作的东西。这是我想要的一个粗略的想法:

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 - 从那里开始,每次运行批处理时,如果找到文件名####,它会在此之后将其重命名为一个。所以当然在第一次运行之后,当它发现文件名存在时,它将把它重命名为 filename0002 等等。

谢谢!!

4

1 回答 1

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
于 2012-07-11T21:05:23.747 回答