2012-02-12 192 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格式的日期,该文件就可以使用任何名称和任意数字。