Я искал способ переименовать 150 файлов ежедневно, просто выполнив 1 команду. Текущие файлы находятся в той же папке C:\reports. Имена файлов различаются, и единственное изменение, которое я должен сделать, это заменить вчерашнюю дату и заменить ее сегодняшней датой, кроме понедельника, заменить дату пятницы на понедельник. Пример - Файл 1 - Batch030315.xlsx Файл 2 - Input030315.xlsx

Завтра имя файла будет Batch030415.xlsx & Input030415.xlsx.

Любая помощь, которую кто-либо может предложить, будет принята с благодарностью.

Спасибо

1 ответ1

0

Вы не очень конкретны в отношении того, какие шаблоны существуют и какие правила следует соблюдать. В любом случае , моя гибридная утилита JEN.BAT для JREN.BAT должна легко и быстро удовлетворить ваши потребности. JREN.BAT переименовывает файлы с помощью замены регулярных выражений. Это чистый скрипт, который запускается изначально на любой машине с Windows начиная с XP.

Я предполагаю, что вы хотите переименовать все файлы .xlsx, которые имеют 6 цифр непосредственно перед расширением. Если это так, то старая дата на самом деле не имеет значения - вы можете просто переименовать все файлы, которые соответствуют шаблону, чтобы использовать сегодняшнюю дату:

@call jren "\d{6}(?=\.xlsx$)" "ts({fmt:'{mm}{dd}{yy}'})" /i /j

Если есть файлы, которые соответствуют шаблону, но их не следует переименовывать, поскольку они содержат неправильную дату, тогда вы можете просто указать целевую старую дату в качестве аргумента и заменить ее старой 6-значной маской:

@call jren "%1(?=\.xlsx$)" "ts({fmt:'{mm}{dd}{yy}'})" /i /j

Если вышеуказанный сценарий был назван fixDate.bat, то вы должны использовать fixDate 030315 из командной строки.

Если вы хотите вычислить старую дату, вы можете добавить мою гибридную утилиту getTimestamp.bat и использовать следующий пакетный скрипт.

@echo off
setlocal
call getTimestamp /f "{w}" /r dayOfWeek
set "offset=-1"
if %dayOfWeek% equ 1 then set "offset=-3"
call getTimestamp /od %offset% /f "{mm}{dd}{yy}" /r oldDay
call jren "%oldDay%(?=\.xlsx$)" "ts({fmt:'{mm}{dd}{yy}'})" /i /j

Независимо от ваших точных требований, вы сможете использовать эти две утилиты для удовлетворения ваших потребностей. Обе утилиты чрезвычайно гибки со многими опциями. Помощь можно получить из командной строки, используя:

jren /?

getTimestamp /?

Возможно, вы захотите направить помощь через БОЛЬШЕ, чтобы вы могли прочитать каждую строку, прежде чем она прокрутится с экрана. Моя консоль настроена на большой буфер, поэтому я могу прокручивать, чтобы увидеть предыдущие строки вывода, поэтому мне не нужно больше.

jren /? | more

getTimestamp /? | more

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .