|
Компьютерный форум 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 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать 1. А зачем все эти переименования файлов, если дату изменения файла легко вывести и так, и произвести необходимые манипуляции? Какая конечная цель этого переименования?
2. Чем геморроиться с батниками, осваивайте Powershell, где работать с метками файлов на порядок проще. Например, вывести имена файлов и даты изменения и отсортировать по дате изменения: dir "C:\Windows" |select name,LastWriteTime |sort lastwritetime Name LastWriteTime ---- ------------- IsUn0419.exe 07.10.1998 18:14:18 IsUninst.exe 29.10.1998 16:45:06 WLXPGSS.SCR 31.03.2014 22:34:22 system.ini 10.07.2015 14:02:40 CSC 08.02.2016 10:38:14 eReg.dat 07.03.2016 20:31:28 DirectX.log 20.03.2016 10:14:34 popcinfo.dat 19.03.2017 9:24:05 UpdateAssistantV2 14.06.2017 22:12:14 VPNInstall.MIF 06.04.2018 19:25:42 DDACLSys.log 04.05.2018 0:49:16 pyw.exe 20.10.2018 14:06:16 py.exe 20.10.2018 14:06:16 pyshellext.amd64.dll 20.10.2018 14:08:32 InfusedApps 23.12.2018 22:57:15 VPNUnInstall.MIF 27.12.2018 20:39:56 RtlExUpd.dll 15.04.2019 5:13:56 progress.ini 06.12.2019 19:10:36 write.exe 07.12.2019 0:29:00 и т. д. |
------- Отправлено: 18:37, 31-08-2021 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off cls Set "BoxIn=Z:\Box_In" Set "Mask=*.xlsx" Set "DateMask=^[2-9][0-9][0-1][0-9][0-3][0-9] .*" Set "MyDate=%Date:~-2%%Date:~3,2%%Date:~0,2% " Pushd "%BoxIn%" ||(Echo Filder "%BoxIn%" not found &Pause &Exit /B 1) For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:W`) Do ( Set "Name=%%f" Set "Dfile=%%~tf" Call Set "Dfile=%%Dfile:~0,10%%" Call Echo %%Name%%| >nul 2>&1 FindStr /I /X /R /C:"%DateMask%" &&Call Set "Name=%%Name:~7%%" Call :MyReName "%%f" "%%Name%%" "%Date%" "%%Dfile%%" "%MyDate%" ||(Popd &Exit /B 0) ) Popd pause Exit /B 0 :MyReName If %3==%4 (Ren %1 "%~5%~2") Else (Exit /B 1) Exit /B 0 Иначе понадобятся небольшие корректировки. |
------- Последний раз редактировалось megaloman, 31-08-2021 в 23:59. Отправлено: 20:10, 31-08-2021 | #3 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Цитата megaloman:
Еще ньюанс, если файл уже был изменен например вчера и имеет имя - 210831 тест.xlsx, я его открываю сегодня, т.е. 01.09, сохраняю и запускаю батник, он должен находить имена файлов которые начинаются на 21**** и заменять эти символы на текущую дату, дата использования батника будет с 01.09, т.е. потенциально файлы все будут начинаться на 21(м)(д) имя.расширение |
||
Отправлено: 09:53, 01-09-2021 | #4 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать Цитата ovrtke:
|
||
------- Отправлено: 09:57, 01-09-2021 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать ovrtke, речь идет о формате даты в системе. То есть, как отображается дата в командах
Echo %date% Dir. Результат батника - "ггммдд имяфайла.xlsx" где ггммдд сформирован из сегодняшней даты. Пробуйте, спрашивайте. |
------- Отправлено: 10:06, 01-09-2021 | #6 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 10:11, 01-09-2021 | #7 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
|
Отправлено: 10:14, 01-09-2021 | #8 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Придумал как сделать, только нужен небольшой upgrade. Нужно дописать если файл содержит вначале "21**** имя.xlsx" - удалять первые 6 символов и заменять на текущую дату. Проверил, батник переименовывает датой когда последняя дата изменения файла была, если ты открываешь документ - чего то меняешь и сохраняешь и запускаешь батник он переименовывает вот так: - 210901 210831 test.txt - т.е. вчерашнюю дату не изменяет и не удаляет а добавляет новую. Если имя файла было тест.xlsx и изменение было 210808 то батник переименовывает его как 210808 тест.xlsx. Помогите сделать апргрейд кода ))
У меня мысли крутятся, что нужно добавить: выделить подстроку с помощью set и запихнуть в if и прописать условие поиске, если 21**** тест.xlsx то удаляем первые 6 символов и заменяем их на текущие, как это сделать не пойму @echo off SetLocal EnableDelayedExpansion set "workdir=c:\temp" for /f "tokens=* delims=" %%a in ('dir /tc /o:-d /a:a /b "%workdir%" 2^>nul') do ( for /f "tokens=* delims=" %%b in ("%workdir%\%%a") do set "d=%%~tb" set "d1=!d:~8,2!!d:~3,2!!d:~0,2!" echo %workdir%\%%a !d1! ren "%workdir%\%%a" "!d1! %%a" attrib -A "%workdir%\!d1! %%a" ) pause |
Отправлено: 10:39, 01-09-2021 | #9 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать ОК, а как вы поймёте, кто изменял?
|
------- Отправлено: 10:41, 01-09-2021 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|