|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск и переименование файлов с помощью BATника |
|
|
CMD/BAT - Поиск и переименование файлов с помощью BATника
|
Новый участник Сообщения: 29 |
Помогите написать!
Нужен батник, который бы сканировал определенный путь (который пропишем) на изминенные СЕГОДНЯ (текущая дата) файлы, смотрел на имя файла, и на дату изменения, если файл имеет имя тест.xlsx и изменен сегодняшней датой, то переименовывал на 210831 тест.xlsx (текущей датой), если есть файл с именем 210826 тест2.xlsx, который менялся 5 дней назад, и сегодня повторно изменился, то менял первые 6 символов на текущую дату изменения, если маски в виде 210826 нет вообще в имени файла то переименовывал в текущую дату изменения. Как я вижу, +- @echo off set thePATH=C:\temp for /F "tokens=1-4 usebackq delims=. " %%1 in (`date /t`) do set mydate=%4%%3%%2%%1 ren test.xlsx %mydate%test.xlsx Еще думаю нужно копать сюда - Отслеживать изменения в файлах можно с помощью аттрибута "архивный". Этот аттрибут выставляется автоматически ОС при любом изменении файла. Вывести список файлов, у которых аттрибут "архивный" с помощью dir /a:a Получить дату/время изменения файла можно с помощью модификаторов переменной цикла. Возможно for / После переименования файла нужно снимать аттрибут архивный - это будет признак того, что файл уже обработан и в следующий раз он в обработку не попадет (если не будет модифицирован). Сделать это можно командой возможно attrib /? Помогите дописать)) |
|
Отправлено: 15:36, 31-08-2021 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать megaloman, не могу понять как заставить переходить по этому пути: "C:\Users\%USERNAME%\Documents\Bitrix24\КМ НЗЧ\210831 ЕВРОПА\210830 Заказы УКРАИНА\.."
тут есть кириллица, сохранил в кодировке 866, все равно не видит Может быть связано с тем что папка Bitrix24 это как виртуальный диск ? |
Отправлено: 14:26, 01-09-2021 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать реально еще вывести в окно cmd кол-во измененных файлов
@Echo Off cls Set "BoxIn=Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210831 ЕВРОПА\210830 Заказы УКРАИНА" Set "Mask=*.xlsx" Set "DateMask=^[2-9][0-9][0-1][0-9][0-3][0-9] .*" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "MyDate=%%d" &Call Set "MyDate=%%MyDate:~2,6%% " Pushd "%BoxIn%" ||(Echo Filder "%BoxIn%" not found &Pause &Exit /B 1) Set /A N=0 For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:W`) Do ( For /F "delims= " %%d In ("%%~tf") Do ( If "%Date%"=="%%d" ( Set "Name=%%f" Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%" Call ReName "%%f" "%MyDate%%%Name%%" Call Set /A N+=1 Call Echo %%N%% "%%f" "--->" "%MyDate%%%Name%%" ) Else ( GoTo :Continue ) ) ) :Continue Echo === Changed %N% files today Popd pause Exit /B 0 Цитата ovrtke:
|
|
------- Отправлено: 15:05, 01-09-2021 | #22 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать megaloman, в тотале путь такой - "c:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210831 ЕВРОПА\210830 Заказы УКРАИНА\210622 Заказ.xlsx"
borisov.a - заменим на %USERNAME% как я понимаю и думаю правильней, ну а дальше без изменений, только вылетается еррор - Синтаксическая ошибка в имени файла, имени папки или метке тома. Починил, работает!) Огромаднейшее спасибо! |
Отправлено: 15:09, 01-09-2021 | #23 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать megaloman, а такой вопрос, думаю углубится, а реально ли сделать так что бы и папка меняла имя так точно как и файл измененный в ней ? по тому же принципу
|
Отправлено: 16:43, 01-09-2021 | #24 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать В идеале все, например структура 3х уровневая
Если структура Dir-> Dir-1-> Dir-2 - и в ней файл, меняем и файл и папки все которые связанные, ведь по сути я ж был в етой папке. Проблем с доступом не будет, т.е. конфликтов с доступом точно как с папками так и с файлами, т.к. это будет делаться в конце рабочего дня. Меняем папку по дате последнего измененного в ней файла, если файлов несколько в папке, но менялся только один, меняем и этот файл и папку целиком Цитата megaloman:
|
|
Отправлено: 17:44, 01-09-2021 | #25 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать ovrtke,
Если структура Dir-> Dir-1-> Dir-2
Моя тестовая структура (я показываю только папки, верьте мне, если нужно - файлы там переименовываются, не хочу засорять пост)
Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210901 Африка Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210901 ЕВРОПА Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\Азия Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210901 Африка\210901 Заказы Берег Слоновой Кости Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210901 Африка\Заказы Нигерия Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210901 ЕВРОПА\210901 Заказы Россия Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210901 ЕВРОПА\210901 Заказы УКРАИНА Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210901 ЕВРОПА\Заказы Беларусь Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\Азия\Заказы Индия Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\Азия\Заказы Китай @Echo Off
cls
>nul Chcp 1251
Set "BoxIn=Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ"
Set "Mask=*.xlsx"
Set "DateMask=^[2-9][0-9][0-1][0-9][0-3][0-9] .*"
If Not Exist "%BoxIn%" (Echo Filder "%BoxIn%" not found &Pause &Exit /B 1)
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "MyDate=%%d" &Call Set "MyDate=%%MyDate:~2,6%% "
Set /A Ntotal=0
For /F "usebackq delims=" %%a In (`2^>nul Dir "%BoxIn%\*.*" /B /A:D`) Do (
Set /A Na=0
For /F "usebackq delims=" %%b In (`2^>nul Dir "%BoxIn%\%%a\*.*" /B /A:D`) Do (
Call :ReFiles "%BoxIn%\%%a\%%b\%Mask%" "Ni" "%%a\%%b\" ||Call :Redir "%%b" "%BoxIn%\%%a\%%b" %%Ni%%
Call Set /A Na+=%%Ni%%
Call Set /A Ntotal+=%%Ni%%
)
Call :Redir "%%a" "%BoxIn%\%%a" %%Na%%
)
Echo ====== Changed %NTotal% files today
pause
Exit /B 0
:ReFiles
Set /A N=0
Pushd "%~dp1" ||Exit /B 0
For /F "usebackq delims=" %%f In (`2^>nul Dir %1 /B /A:-D /O:-D /T:W`) Do (
For /F "delims= " %%d In ("%%~tf") Do (
If "%Date%"=="%%d" (
Set "Name=%%f"
Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%"
>nul Call ReName "%%f" "%MyDate%%%Name%%"
Call Set /A N+=1
Call Echo %%N%% "%%a\%%b\%%f" "--->""%MyDate%%%Name%%"
) Else (GoTo :Continue)
)
)
:Continue
Set /A %~2=%N%
Popd
If %N%==0 (Exit /B 0) Else (Exit /B 1)
:ReDir
If "%3"=="0" Exit /B 0
Set "Name=%~1"
Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%"
>nul Call ReName %2 "%MyDate%%%Name%%"
Call Echo === "%~nx2" "--->""%MyDate%%%Name%%"
Exit /B 0
|
------- Отправлено: 21:31, 01-09-2021 | #26 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Затестирую отпишусь)
|
Отправлено: 08:45, 02-09-2021 | #27 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать megaloman, а батник сканирует определенную структуру ? просто попробовал сделать так:
Путь - C:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210901 МУЗ-проценщик\test\test.xlsx Результат - C:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210902 МУЗ-проценщик\210902 test\210902 test.xlsx - как бы все ок, все отлично Но, если добавить в папку 210902 test еще пару папок и туда положить несколько файлов, он их не видит....как расширить дерево сканирования до 5-10 внутренних папок например ? |
Отправлено: 13:24, 02-09-2021 | #28 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать батник сканирует определенную структуру, как Вы заказывали
Я не понимаю Вашу проблему. Если файл сегодня изменялся, он будет переименован, будет переименована папка, где он находится, будет переименована папка, в которой находится эта папка. То, что Вы изобразили, не вписывается в этот алгоритм. Никаких ограничений на количество папок DirX и вложенных в них подпапок DirXi нет. Главное, чтобы в папке DirXi хоть один файл был сегодня изменен. Проверил еще раз. |
------- Последний раз редактировалось megaloman, 02-09-2021 в 15:05. Отправлено: 15:00, 02-09-2021 | #29 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Хм, странно, чего у меня тогда не переименовывает вниз ?
|
Отправлено: 15:12, 02-09-2021 | #30 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Копирование папки с файлами с помощью batника | Stgean | Скриптовые языки администрирования Windows | 6 | 19-04-2019 12:00 | |
CMD/BAT - Поиск и копирование файлов с помощью пакетного файла. | Svtln | Скриптовые языки администрирования Windows | 4 | 09-04-2017 18:03 | |
CMD/BAT - Архивирование, переименование и перемещение файлов с помощью BAT-файла | kirillius | Скриптовые языки администрирования Windows | 7 | 13-05-2016 12:57 | |
CMD/BAT - Поиск, переименование и создание | Дима_Качуров@vk | Скриптовые языки администрирования Windows | 2 | 25-07-2012 15:27 | |
[решено] поиск и переименование файлов | exo | Хочу все знать | 5 | 26-08-2011 17:05 |
|