|
Компьютерный форум 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 | Цитировать Вот что пишет, хотя файл переименован в папке рррр
C:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ\210902 МУЗ-проценщик\210902 test\rrrr\pppp\ меняет только первые две, в папке rrrr - файлов нет, может быть изза етого ? попробовал положить файл в папку rrrr, аналогично, не переименовывает |
Отправлено: 15:24, 02-09-2021 | #31 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать ovrtke, Вы запрашивали:
Цитата ovrtke:
|
|
------- Отправлено: 15:43, 02-09-2021 | #32 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать а нельзя сделать типа рекурсивный поиск? как например в powershell, или нужно именно задавать глубину поиска ?
|
Отправлено: 16:07, 02-09-2021 | #33 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать megaloman, последний вариант, сделать поиск от прописанного пути -> до конечного, либо как реально увеличить глубину поиска ?)
|
Отправлено: 09:20, 03-09-2021 | #34 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать ovrtke, Поиск надо делать вверх ногами и рекурсия не нужна. Переименование файлов делается "на раз", с цепочкой папок надо было сообразить.
Поиск в папках произвольной вложенности
@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] .*" Pushd "%BoxIn%" ||(Echo Folder "%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=" %%d In (`2^>nul Dir "%BoxIn%\*.*" /B /A:D /S ^|Sort /R`) Do ( Set /A Na=0 Call :ReFiles "%%d\%Mask%" "Ni" ) Echo ====== Changed %NTotal% files today Popd 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 "%~dp1%%f" "%MyDate%%%Name%%" Call Set /A N+=1 Call Echo %%N%% "%~dp1%%f" "--->""%MyDate%%%Name%%" ) Else (GoTo :Continue) ) ) :Continue Set /A %~2=%N% Set /A NTotal+=%N% Popd Set "DirName=%~dp1" If Exist "%~dp1%MyDate%*.*" Call :Redir "%%DirName:~0,-1%%" Exit /B 0 :ReDir Set "Name=%~nx1" Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%" >nul Call ReName %1 "%MyDate%%%Name%%" &&Call Echo === "%~nx1" "--->""%MyDate%%%Name%%" ||Echo ??? %1 Exit /B 0 |
------- Последний раз редактировалось megaloman, 03-09-2021 в 15:09. Отправлено: 13:23, 03-09-2021 | #35 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать megaloman, вы БОГ! Тему можно считать закрытой, +100 в КАРМУ!
|
Отправлено: 15:12, 03-09-2021 | #36 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать megaloman, доброго времени суток! Обращусь к вам еще с одной просьбой
![]() 1) Set "Mask=*.xlsx" - тут можно перечислить расширение не только .xlsx а допустим и .doc ? 2) Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 1) - как вывести в окно cmd сканируемую категорию ? Заранее очень благодарен за скорейший ответ ![]() |
Отправлено: 13:02, 15-09-2021 | #37 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Цитата megaloman:
|
||
Отправлено: 16:07, 15-09-2021 | #38 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Можно задавать список масок файлов
@Echo Off cls >nul Chcp 1251 Set "BoxIn=Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ" Set Mask="*.xlsx" "*.doc" "*.txt" Set "DateMask=^[2-9][0-9][0-1][0-9][0-3][0-9] .*" Pushd "%BoxIn%" ||(Echo Folder "%BoxIn%" not found &Pause &Exit /B 1) Echo +++ Processing files Mask=%Mask% Folder="%BoxIn%" 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=" %%d In (`2^>nul Dir "%BoxIn%\*.*" /B /A:D /S ^|Sort /R`) Do ( Set /A Na=0 Call :ReFiles "%%d" "%Mask%" "Ni" ) Echo === Changed %NTotal% files today. Folder="%BoxIn%" Mask=%Mask% Popd pause Exit /B 0 :ReFiles Set /A N=0 Pushd "%~1" ||Exit /B 0 For /F "usebackq delims=" %%f In (`2^>nul Dir %~2 /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 "%~1\%%f" "%MyDate%%%Name%%" Call Set /A N+=1 Call Echo %%N%% "%~1\%%f" "--->""%MyDate%%%Name%%" ) Else (GoTo :Continue) ) ) :Continue Set /A %~3=%N% Set /A NTotal+=%N% Popd If Exist "%~1\%MyDate%*.*" Call :Redir %1 Exit /B 0 :ReDir Set "Name=%~nx1" Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%" >nul Call ReName %1 "%MyDate%%%Name%%" &&Call Echo === "%~nx1" "--->""%MyDate%%%Name%%" ||Echo ??? %1 Exit /B 0 Еще слегка халтурный вариант
@Echo Off cls >nul Chcp 1251 Call :Extension "Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ" "*.xlsx" Call :Extension "Z:\Users\borisov.a\Documents\Bitrix24\КМ НЗЧ" "*.doc" pause Exit /B 0 :Extension Set "BoxIn=%~1" Set "Mask=%~2" 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 &Exit /B 1) Echo. Echo +++ Processing files Mask=%2 Folder=%1 Pushd "%BoxIn%" ||(Echo Folder "%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=" %%d In (`2^>nul Dir "%BoxIn%\*.*" /B /A:D /S ^|Sort /R`) Do ( Set /A Na=0 Call :ReFiles "%%d\%Mask%" "Ni" ) Echo === Changed %NTotal% files today. Folder=%1 Mask=%2 Popd 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 "%~dp1%%f" "%MyDate%%%Name%%" Call Set /A N+=1 Call Echo %%N%% "%~dp1%%f" "--->""%MyDate%%%Name%%" ) Else (GoTo :Continue) ) ) :Continue Set /A %~2=%N% Set /A NTotal+=%N% Popd Set "DirName=%~dp1" If Exist "%~dp1%MyDate%*.*" Call :Redir "%%DirName:~0,-1%%" Exit /B 0 :ReDir Set "Name=%~nx1" Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%" >nul Call ReName %1 "%MyDate%%%Name%%" &&Call Echo === "%~nx1" "--->""%MyDate%%%Name%%" ||Echo ??? %1 Exit /B 0 |
------- Последний раз редактировалось megaloman, 15-09-2021 в 18:40. Отправлено: 17:23, 15-09-2021 | #39 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать megaloman, Боженька
![]() |
Отправлено: 17:39, 15-09-2021 | #40 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|