Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создание архива после поиска файлов по дате изменения

Ответить
Настройки темы
CMD/BAT - Создание архива после поиска файлов по дате изменения

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток ! Заранее прошу прощения, не опытен в писаний батников . В общем дали задание написать бат файл , который искал бы файлы по маске .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
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Adilr3r:
и с заданной датой изменения (5 дней к примеру). »
«5 дней» — это не «дата изменения».

Отправлено: 05:08, 28-02-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
«5 дней» — это не «дата изменения». »
Ошибочка , позднее время очень и уже с просони пишу бред . Поиск файлов у которых дата последнего изменения были 5 дней назад , по всем дискам . И дальше уже архивация и с именем этой даты. Прошу прощения за опечаток

Цитата Iska:
«5 дней» — это не «дата изменения». »
Ошибочка , позднее время очень и уже с просони пишу бред . Поиск файлов у которых дата последнего изменения были 5 дней назад , по всем дискам . И дальше уже архивация и с именем этой даты. Прошу прощения за опечаток

Отправлено: 05:33, 28-02-2020 | #3


Старожил


Сообщения: 352
Благодарности: 193

Профиль | Отправить PM | Цитировать


Цитата Adilr3r:
но как сделать чтобы найденный результат (все файлы с данной маской) были заархивированы с названием даты изменения ?
@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 »
Вместо papka подставить %FOLDER%, добавив строчкой выше set FOLDER=x:\путь\к\папке
Заменить echo %%c на команду архиватора. В %tc% есть нужная дата, в %FOLDER%\%%c - полное имя файла для добавления в архив
Пути и имена "обрамлять в кавычки"
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:58, 28-02-2020 | #4


Ветеран


Contributor


Сообщения: 2732
Благодарности: 1698

Профиль | Отправить 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
If /I %1=="C:" Exit /B - здесь сделано исключение диска C: при поиске файлов. Если Вас это не устраивает - удалите эту строку

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 28-02-2020 в 18:25.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:13, 28-02-2020 | #5


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Упаковать файлы по маске в конкретной папке с подпапками в архив с датой в имени, изменённые указанное количество дней тому назад.
Упаковать файлы по маске на всех дисках с путями в архив с датой в имени, изменённые указанное количество дней тому назад. »
Работает все великолепно ! Спасибо большое !)

Отправлено: 23:42, 03-03-2020 | #6


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить 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


Ветеран


Contributor


Сообщения: 2732
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Adilr3r, в коде ссылка
Цитата megaloman:
Заимствовано http://forum.oszone.net/thread-186889.html »
В cmd работа с датами очень затруднена. Я не изобретал велосипед и не стал перепрограммировать рабочий код, взял его, как есть с непринципиальными доработками. По видимому, вычисление основано на преобразовании даты в значение юлианского дня (целое число), с последующим вычитанием или прибавлением требуемого числа дней и последующего обратного преобразования полученного значения юлианского дня в дату григорианского календаря дд мм гггг.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:46, 04-03-2020 | #8


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
В cmd работа с датами очень затруднена. Я не изобретал велосипед и не стал перепрограммировать рабочий код, взял его, как есть с непринципиальными доработками. По видимому, вычисление основано на преобразовании даты в значение юлианского дня (целое число), с последующим вычитанием или прибавлением требуемого числа дней и последующего обратного преобразования полученного значения юлианского дня в дату григорианского календаря дд мм гггг. »
Понял Вас , спасибо большое за помощь !

Отправлено: 16:39, 04-03-2020 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Создание архива после поиска файлов по дате изменения

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Удаление старых файлов-папок по дате изменения (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




 
Переход