IF批处理文件后,在Windows批处理文件中的++ FOR循环中重命名文件?

时间:2012-07-11 19:14:55

标签: if-statement batch-file for-loop batch-rename

我在网上搜索,找不到我正在寻找的确切代码......我发现的东西非常相似,却没有让它们起作用。这是我想要的大概:

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,依此类推。

谢谢!

1 个答案:

答案 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