Перейменуйте файли, використовуючи пакетний файл


0

Я шукав спосіб перейменувати 150 файлів щодня, просто виконавши 1 команду. Поточні файли знаходяться в одній папці C: \ report. Назви файлів відрізняються, і єдина зміна, яку я повинен внести, - це замінити вчорашню дату та замінити її сьогоднішньою датою, крім понеділка, замінити дату п'ятниці на понеділок. Приклад - Файл 1 - Batch030315.xlsx Файл 2 - Input030315.xlsx

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

Будемо дуже вдячні за будь-яку допомогу, яку кожен може запропонувати.

Дякую


1
150 файлів, здається, достатньо, щоб заслужити власну папку. Чому б просто не помістити файли у папку та копіювати її щодня, використовуючи поточну дату як нову назву папки? Це буде набагато простіше в управлінні IMHO.
krowe

Як щодо того, якщо програма запустилася пн-пт і змінила дату кожного файлу на поточну дату?
барлоп

Відповіді:


0

Ви не дуже конкретні щодо того, які закономірності існують та яких правил слід дотримуватися. Незважаючи на те, моя гібридна утиліта JScript / пакетна JREN.BAT повинна мати можливість легко та швидко відповідати вашим потребам. JREN.BAT перейменовує файли за допомогою регулярної заміни виразів. Це чистий сценарій, який працює на будь-якій машині Windows від XP далі.

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

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

Якщо є файли, які відповідають шаблону, але їх не слід перейменовувати, оскільки вони містять неправильну дату, то ви можете просто надати цільову стару дату як аргумент та замінити її на стару шестизначну маску:

@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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.