Regex 批量重命名文件
所以我有一系列的文件,格式如下,它们的真实文件名后跟日期Regex 批量重命名文件,regex,batch-file,grep,file-rename,Regex,Batch File,Grep,File Rename,所以我有一系列的文件,格式如下,它们的真实文件名后跟日期 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 fil
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
要安全地执行此操作,
echo
在mv
之前:
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
更新:
您可以使用awk
生成新文件名,并将其放入上面的命令中
for i in *_*.pdf; do
mv $i `echo $i | awk -F_ -v OFS=_ '{sub(/[0-9]+/, $NF+1, $NF)}1'`
done
您可以尝试此.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格式的日期,该文件就可以使用任何名称和数字。所有文件的日期都是2011年12月12日吗?如果是的话,基于正则表达式的重命名可以做到这一点。但如果没有,则需要编写一些代码。正则表达式无法将
2011年1月31日
更改为2011年2月1日
;)如果日期总是2011年12月12日
,则此操作应有效。如果不是,RegEx在这种情况下也帮不了忙。只是为了完全理解这是一个正则表达式,所以假设我的文件上升到了5位,那么可能会说[0-9]+