2013-07-12 60 views
1

我有一個文件列表。我每天都會生成一個新的文件列表。我需要保留以前生成的文件列表。我想補充和數量,以昨天的文件的末尾,我想通過1遞增所有以前的文件,使昨日的文件始終是0001例如:使用批處理文件重命名文件並增加後綴

文件昨天產生的是:

P.xls 
T.xls 
W.xls 

我想運行一個批處理文件,命名它們:

P0001.xls 
T0001.xls 
W0001.xls 

好的。我可以做那部分。沒什麼大不了。這些文件總是被命名爲P,T和W,所以這部分很簡單。更難的部分是每一天重命名P0001.xls,T0001.xls和W0001.xls。我可以啓動這樣一個批處理文件:

rename P9998.xls P9999.xls 

和我的工作方式,以P0001.xls,但是這是荒謬的。我不想爲每個文件輸入10,000行。

對此批處理文件的任何幫助將不勝感激。

基思

回答

0

不是遍歷所有可能的數字,它是更有效的處理只是存在的文件。作爲第一步,我暫時將.ren附加到文件中,以便我不必擔心按降序處理。

此解決方案假定以P W或T開頭的所有現有.XLS文件將被重命名並遵循正確的命名約定。它還假定要重命名的文件位於當前目錄中。

@echo off 
setlocal enableDelayedExpansion 
for %%C in (P T W) do ren %%C*.xls *.*.ren 
ren ?.xls.ren ?0000.* 
for %%F in (*.xls.ren) do (
    set "num=%%F" 
    set /a "num=1!num:~1,4! - 9999" 
    set "num=000!num!" 
    ren %%F ?!num:~-4!.xls 
) 

這裏是一個更直接的,但也許不太有效版本,安全地忽略.xls文件以P T或W在所述不符合命名約定開始。在這裏我按降序對文件進行排序,這樣我只需要重命名每個文件一次。

@echo off 
setlocal enableDelayedExpansion 
for /f "delims=" %%F in (
    'dir /b /a-d /o-n *.xls^|findstr /rix [PTW][0-9][0-9][0-9][0-9].xls' 
) do (
    set "num=%%F" 
    set /a "num=1!num:~1,4! - 9999" 
    set "num=000!num!" 
    ren %%F ?!num:~-4!.xls 
) 
for %%C in (P T W) do ren %%C.xls ?0001.* 

我正在利用REN如何處理通配符的一些鮮爲人知的功能。有關更多信息,請參閱How does the Windows RENAME command interpret wildcards?

+0

You Rock !!正是我需要的,它的工作完美! –

+0

@KeithMungo - 如果完全回答你的問題,不要忘記接受答案。只需點擊左上角附近的複選標記即可。該行動讓其他人知道該問題已得到解答,它將授予您2個聲望點,並將答案海報授予15分。 – dbenham

+0

@MethodMan - 不要提出新問題作爲對現有答案的評論。如果您有問題,請發表您自己的問題。 – dbenham

0

下面的批處理文件以更快的方式實現所需的重命名,因爲它處理文件編號而不是文件名,因此每個週期中重命名3個文件;此外,for /L循環的運行速度比使用文件名的常規for快。如果文件數量很大,速度很重要。

@echo off 
setlocal EnableDelayedExpansion 

rem Rename files generated yesterday 
ren ?.xls ?0000.xls 

rem Get the number of the last file 
for /F "delims=" %%a in ('dir /B /A-D /O-N *.xls') do (
    set lastName=%%a 
    goto continue 
) 
:continue 
set /A oldNumber=1%lastName:~1,4%, newNumber=oldNumber+1, numFiles=newNumber-10000 

rem Rename all files 
for /L %%a in (1,1,%numFiles%) do (
    ren ?!oldNumber:~1!.xls ?!newNumber:~1!.xls 
    set /A oldNumber-=1, newNumber-=1 
)