2012-07-11 64 views
0

我搜索了網頁,找不到我正在尋找的確切代碼...我發現了非常相似的東西,但沒有讓他們工作。這是一個粗略的想法,我想:在Windows批處理文件中的++ FOR循環內對IF EXIST進行檢查後重命名文件?

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等等。

謝謝!

回答

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 
+0

哦,拍攝,抱歉。正在重命名的日誌文件不會有數字。所以它會一直是「debug.log」,我會重命名它(有效地添加數字)。因此,第一次,debug.log重命名爲debug001(orwhatever).log,下一次debug.log重命名爲debug002.log等。 – Sduibek 2012-07-11 21:29:14

+0

@ user1502648 - 好的,我認爲第二組代碼可以滿足您的要求。 – dbenham 2012-07-11 21:42:04