2012-02-12 189 views
0

所以我有一系列文件,格式如下他們的真實文件名稱後跟日期。批量重命名文件

file_1_12DEC2011.pdf 
file_2_12DEC2011.pdf 
file_3_12DEC2011.pdf 
file_4_12DEC2011.pdf 
file_5_12DEC2011.pdf 

我想弄清楚我該如何增加一天的一天。例如,這將是我期望的結果。

file_1_13DEC2011.pdf 
file_2_13DEC2011.pdf 
file_3_13DEC2011.pdf 
file_4_13DEC2011.pdf 
file_5_13DEC2011.pdf 
+0

對於所有文件,日期是否始終爲'12DEC2011'?如果是的話,基於RegEx的重命名可以做到這一點。但是,如果不是,你需要編寫一些代碼。正則表達式將無法將'31JAN2011'更改爲'01FEB2011';) – 2012-02-12 03:43:41

回答

1

要安全地做到這一點,echomv

for i in file_[1-5]_12DEC2011.pdf; do 
    mv $i ${i/12/13} 
done 

要迅速做到這一點,使用rename命令:

$ rename 's/12/13/' file_[1-5]_12DEC2011.pdf 

UPDATE: 您可以使用awk來生成新的文件名,並將其放在上面的那些命令中。

for i in *_*.pdf; do 
    mv $i `echo $i | awk -F_ -v OFS=_ '{sub(/[0-9]+/, $NF+1, $NF)}1'` 
done 
+0

如果日期總是「12DEC2011」,則應該起作用。如果沒有RegEx在這種情況下無法提供幫助。 – 2012-02-12 03:44:36

+0

只是爲了充分理解這是一個正則表達式,所以說我有文件上漲到5位數可以說[0-9] + – endy 2012-02-12 04:10:33

1

同比可以試試這個.BATch文件:

@echo off 
setlocal EnableDelayedExpansion 
for %%f in (*.pdf) do (
    set name=%%~Nf 
    set day=!name:~-9,2! 
    set /A day=1!day! %% 100 + 1 
    if !day! lss 10 set day=0!day! 
    ECHO ren %%f !name:~0,-9!!day!!name:~-7! 
) 

測試文件,如果結果是好的,刪除REN命令的ECHO的一部分。

只要文件名的最後9個字符是上面顯示的DDMMMYYYY格式的日期,該文件就可以使用任何名稱和任意數字。