Массовое переименование файлов - PullRequest
0 голосов
/ 12 февраля 2012

Итак, у меня есть серия файлов в следующем формате. Их настоящее имя файла и дата.

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

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Yoy может попробовать этот файл .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!
)

Проверьте файл и, если результат в порядке, удалите часть ECHO в команде ren.

Этот файл должен работать с любым именем и любым номером, если последние 9 символов имени файла будут датой в формате DDMMMYYYY, как показано выше.

1 голос
/ 12 февраля 2012

Чтобы сделать это безопасно, 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

UPDATE: Вы можете использовать awk, чтобы сгенерировать новое имя файла и поместить его в эти команды выше.

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