|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создание архива после поиска файлов по дате изменения |
|
CMD/BAT - Создание архива после поиска файлов по дате изменения
|
Новый участник Сообщения: 7 |
Доброго времени суток ! Заранее прошу прощения, не опытен в писаний батников . В общем дали задание написать бат файл , который искал бы файлы по маске .jpg и с заданной датой изменения (5 дней к примеру). После эти самые файлы были заархивированны , и имя архива было датой изменения . Каюсь , не совсем скорее всего четко объяснил свою мысль .Нашел пример кода который ищет по дате файлы , но как сделать чтобы найденный результат (все файлы с данной маской) были заархивированы с названием даты изменения ?
@echo off set /p tc="Введите дату (01.04.2016): " for /f "tokens=1,3,*" %%a in ('dir /a-d/tw/-c "papka"^|findstr /rc:"^[^ ]"') do if %tc%==%%a echo %%c pause>nul |
|
Отправлено: 03:19, 28-02-2020 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Adilr3r:
|
|
Отправлено: 05:08, 28-02-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
|
||
Отправлено: 05:33, 28-02-2020 | #3 |
Старожил Сообщения: 352
|
Профиль | Отправить PM | Цитировать Цитата Adilr3r:
Заменить echo %%c на команду архиватора. В %tc% есть нужная дата, в %FOLDER%\%%c - полное имя файла для добавления в архив Пути и имена "обрамлять в кавычки" |
|
Отправлено: 11:58, 28-02-2020 | #4 |
Ветеран Сообщения: 2732
|
Профиль | Отправить PM | Цитировать Упаковать файлы по маске в конкретной папке с подпапками в архив с датой в имени, изменённые указанное количество дней тому назад.
Укажите свой путь, маску, количество дней, путь для файлов с архивами
@Echo Off
cls
Set /A DeltaDay=-5
Set "BoxIn=D:\CMD_Forum"
Set "Mask=*.jpg"
Set "BoxOut=Z:\Box_Out"
Set "Arc="%ProgramFiles%\winrar\winrar.exe""
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
Set "@Tdate=%@Tdate:~0,8%"
Set /A DeltaDay2=%DeltaDay%+1
Set "ddmmyyyy=%@Tdate:~6,2%.%@Tdate:~4,2%.%@Tdate:~0,4%"
Call :FromDate %DeltaDay% %ddmmyyyy% "Ayyyymmdd"
Call :FromDate %DeltaDay2% %ddmmyyyy% "Byyyymmdd"
Call :Archives "%BoxIn%" "%Mask%" "%BoxOut%" %Arc% "%Ayyyymmdd%" %Byyyymmdd%
pause
Exit /B 0
:Archives
Set "NBoxIn=%~1"
Set "NBoxIn=%NBoxIn::\=_%"
Set "NBoxIn=%NBoxIn::=%"
Set "NBoxIn=%NBoxIn:\=-%"
%4 a -r -tam%~5 -tbm%~6 "%~3\%~5-%NBoxIn%" "%~1\%~2"
Exit /B 0
:FromDate
rem Пересчет даты на заданное кол-во дней
rem В первом аргументе +- дни
rem Во втором аргументе дата в формате dd.mm.yyyy
rem В третем аргументе имя переменной в кавычках где получим новую дату в формате yyyymmdd
rem Заимствовано http://forum.oszone.net/thread-186889.html
rem вызов Call :FromNow %DeltaDay% %Date% "yyyymmdd"
rem результат в перемменной %yyyymmdd%
SetLocal
Set "DT=%~2"
Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
Set /A J=J+2-12*L,I=100*(N-49)+I+L
Set /A yyyy=I,mm=100+J,dd=100+K
EndLocal& Set "%~3=%yyyy%%mm:~-2%%dd:~-2%"
GoTo :Eof
Упаковать файлы по маске на всех дисках с путями в архив с датой в имени, изменённые указанное количество дней тому назад.
@Echo Off cls Set /A DeltaDay=-5 Set "Mask=*.jpg" Set "BoxOut=Z:\Box_Out" Set "Arc="%ProgramFiles%\winrar\winrar.exe"" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" Set "@Tdate=%@Tdate:~0,8%" Set /A DeltaDay2=%DeltaDay%+1 Set "ddmmyyyy=%@Tdate:~6,2%.%@Tdate:~4,2%.%@Tdate:~0,4%" Call :FromDate %DeltaDay% %ddmmyyyy% "Ayyyymmdd" Call :FromDate %DeltaDay2% %ddmmyyyy% "Byyyymmdd" FOR /F "usebackq tokens=1 skip=1 delims=:" %%i IN (`"wmic logicaldisk where drivetype="3" get caption | FINDSTR /R /C:"[A-Z]""`) DO ( Call :Archives "%%~i:" "%Mask%" "%BoxOut%" %Arc% "%Ayyyymmdd%" %Byyyymmdd% ) pause Exit /B 0 :Archives If /I %1=="C:" Exit /B Set "NBoxIn=%~1" Set "NBoxIn=%NBoxIn::\=_%" Set "NBoxIn=%NBoxIn::=%" Set "NBoxIn=%NBoxIn:\=-%" %4 a -r -tam%~5 -tbm%~6 "%~3\%~5-%NBoxIn%" "%~1\%~2" Exit /B 0 :FromDate rem Пересчет даты на заданное кол-во дней rem В первом аргументе +- дни rem Во втором аргументе дата в формате dd.mm.yyyy rem В третем аргументе имя переменной в кавычках где получим новую дату в формате yyyymmdd rem Заимствовано http://forum.oszone.net/thread-186889.html rem вызов Call :FromNow %DeltaDay% %Date% "yyyymmdd" rem результат в перемменной %yyyymmdd% SetLocal Set "DT=%~2" Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 Set /A J=J+2-12*L,I=100*(N-49)+I+L Set /A yyyy=I,mm=100+J,dd=100+K EndLocal& Set "%~3=%yyyy%%mm:~-2%%dd:~-2%" GoTo :Eof |
|
------- Последний раз редактировалось megaloman, 28-02-2020 в 18:25. Отправлено: 18:13, 28-02-2020 | #5 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 23:42, 03-03-2020 | #6 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать SetLocal Set "DT=%~2" Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100 Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 Set /A J=J+2-12*L,I=100*(N-49)+I+L Set /A yyyy=I,mm=100+J,dd=100+K EndLocal& Set "%~3=%yyyy%%mm:~-2%%dd:~-2%" |
Последний раз редактировалось Adilr3r, 04-03-2020 в 15:03. Причина: опечатка в сообщении Отправлено: 14:52, 04-03-2020 | #7 |
Ветеран Сообщения: 2732
|
Профиль | Отправить PM | Цитировать Adilr3r, в коде ссылка
Цитата megaloman:
|
|
------- Отправлено: 15:46, 04-03-2020 | #8 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 16:39, 04-03-2020 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - [решено] Удаление старых файлов-папок по дате изменения (change time) | badman | Скриптовые языки администрирования Windows | 18 | 09-01-2019 18:44 | |
Медиа - [решено] Группировка фото архива по дате подобно Windows 7 | POPOV2010 | Microsoft Windows 10 | 10 | 10-04-2016 21:29 | |
CMD/BAT - Архивирование файлов по дате изменения | GODolubOFF | Скриптовые языки администрирования Windows | 7 | 15-04-2015 20:22 | |
CMD/BAT - Изменить функцию сортировки файлов - сортировка дб по дате создания а не изменения | dark-------13 | Скриптовые языки администрирования Windows | 2 | 04-07-2012 17:55 | |
CMD/BAT - [решено] Создание папок по дате получения файлов и перемещение в них файлов | KamikadZZe | Скриптовые языки администрирования Windows | 1 | 01-09-2011 14:15 |
|