Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 批量重命名文件_Regex_Batch File_Grep_File Rename - Fatal编程技术网

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