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 に変更します。それ以降、バッチが実行されるたびに、filename#### が見つかった場合は、その後に名前が変更されます。もちろん、これが最初に実行された後、ファイル名が存在することが判明すると、名前が 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 にし、最新のログの番号を最大にするには、小さな変更が必要です。必要な名前変更は 1 つだけです。

@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 に答える