Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
5 / 5 / 0
Регистрация: 29.09.2010
Сообщений: 18
1

Удаление архива с именем даты, которая была пять дней назад

02.02.2011, 16:15. Показов 6046. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Поставлена задача каждый день создавать .rar архив из папки на одном компьютере с именем текущей даты и копировать на другой по сети. Архив в конечной папке, который был туда скопирован 5 дней назад, нужно удалять.
Справиться с первыми 2-мя пунктами труда не составило, а вот с удалением заминочка...(( Подскажите, люди добрые )).
Вот, то что уже сделано (создает архив, копирует и выводит в файл отчет):

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
set PathSource=C:\bat1\BAZES\%date%.rar
set PathDestination=C:\bat2\pdc\ib
set LogFile=C:\log\LogEveryday.txt
echo ********************************* >>%LogFile%
echo Start arch %date% %time% >>%LogFile%
"c:\Program Files\WinRAR\winrar.exe" a -r -ilogc:\log\backup.log C:\bat1\BAZES\%date%.rar C:\bat1\BAZES\* 
echo Stop arch %date% %time% >>%LogFile%
echo ********************************* >>%LogFile%
echo Start copy %date% %time% >>%LogFile%
copy /Y "%PathSource%" "%PathDestination%" >>%LogFile%
echo Stop copy %date% %time% >>%LogFile%
А вот пока безуспешные попытки ковыряния с датой...Тут пытаюсь хотя бы за вчерашний день удалить.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
set d=%date:~0,2%
if %d% lss 10 set d=%d:~-1%
set /a d=%d%-1
set tdate=%d%%date:~2%
goto start
:data
set x=%~t1
set y=%x:~0,-6%
if "%y%"=="%tdate%" del /f /s /q "%1"
rem exit /b
:start
for /f "tokens=*" %%i in (dir "%PathDestination%\*.rar" /a /b) do (call :data %%i)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2011, 16:15
Ответы с готовыми решениями:

Найти дату, которая была неделю назад
Введена дата, определить дату наступившею неделей раньше. Через case of.

Найти дату, которая была 7 месяцев назад
Здравствуйте! Нужно отобрать всех студентов, чьё ДР было ровно 7 месяцев назад. Я в запросе ввела...

Как получить дату, которая была месяц назад
Мне нужно выбрать данные за предыдущий месяц, т.е. это сегодняшняя дата минус один месяц. Текущую...

Ввести N дат в формате ДД.ММ.ГГГГ. Определить дату, которая была K месяцев назад
Ввести N дат в формате ДД.ММ.ГГГГ. Определить дату, которая была K месяцев назад.

9
142 / 68 / 4
Регистрация: 23.06.2010
Сообщений: 155
02.02.2011, 17:42 2
Windows Batch file
1
forfiles /P %PathDestination% /M *.rar /D -5 /C "cmd /c del /F /Q @path"
В Windows XP утилиты forfiles нет, ее можно взять у серверной Windows Server 2003 или Microsoft Windows 2000 Professional Resource Kit
2
5 / 5 / 0
Регистрация: 29.09.2010
Сообщений: 18
03.02.2011, 07:43  [ТС] 3
Спасибо, вроде получилось.

Windows Batch file
1
"%forfiles%" -p"%PathDestination%" -s  -m*.rar -c"CMD /C echo del \"@FILE\" &del  /F /Q \"@FILE\"" -d-5  >>%LogFile%
Вот что выводится в лог файл

Start del "03.02.2011" 14:11:29,21
Searching files having date <= 1/29/ 2011
----- DIRECTORY : C:\bat2\pdc\ib
0 file(s) processed
----- DIRECTORY : ib
0 total file(s) processed
Stop del 03.02.2011 14:11:29,26


Вот только пока не совсем понятно что и как он удаляет...
По имени файла или по дате, когда создан файл?

Добавлено через 23 минуты
окончательный вариант:
Windows Batch file
1
"%forfiles%" -p"%PathDestination%"  -s -d-%days% -m*.rar -c"CMD /C echo del @FILE &del  /F /Q @FILE"   >>%LogFile%
2
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
04.02.2011, 23:24 4
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set d=%date:~0,2%
if %d% lss 10 set d=%d:~-1%
set /a d=%d%-5
set tdate=%d%%date:~2%
goto start
:data
set x=%~t1
set y=%x:~0,-6%
if "%y%"=="%tdate%" del /a /f /q "%1"
exit /b
:start
for /f "tokens=*" %%i in ('dir /a /b *.rar') do (call :data %%i)
exit
Ааа, мои коды использовал... не проверял, но вроде, должно работать...
1
5 / 5 / 0
Регистрация: 29.09.2010
Сообщений: 18
05.02.2011, 06:22  [ТС] 5
Да уже с помощью утилиты forfiles сделала, но все равно спасибо)). В твоем коде не смогла до конца разобраться и сделать так, чтобы работало. Например, set x=%~t1 - это что? "%1" - а это?
1
795 / 177 / 9
Регистрация: 11.01.2011
Сообщений: 543
06.02.2011, 18:10 6
Извините... "использовала".

"%1" - это первый аргумент, который передается с команде "call"
"%~t1" - это дата/время первого аргумента (файла)
Прочтите "call /?". Все поймёте =)
2
5 / 5 / 0
Регистрация: 29.09.2010
Сообщений: 18
07.02.2011, 06:06  [ТС] 7
Дошло))
1
59 / 58 / 9
Регистрация: 11.12.2009
Сообщений: 350
04.06.2012, 11:48 8
Всем привет!!!! подскажите плизззз.. не могу разобраться!!!

У меня архивы делаются каждый день "Copy_2010-11-27.rar" как можно написать ватник чтоб он удалял старые архивы! Например 5 последних дней хранит остальное удаляет!!!!

Пожалуйста подскажите очень надо!!!

Заранее благодарю!!!

Добавлено через 17 минут
блин разобрался!!! всем спасибо))))
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
04.06.2012, 13:27 9
Не претендует на оригинальность.
Объединил код Ris-а и часть функции счисления дней atributz-а (FromDate):
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
set ago=5
call :indate %date% -%ago%
set dayago=%days%
for /f "delims=" %%i in ('dir /a-d /b *.rar') do (call :data "%%i")
goto :eof
 
:data
set x=%~t1
call :indate %x:~0,-6% 0
::if %days% lss %dayago% del /a /f /q "%1"
exit /b 
 
:InDate
set dat=%~1
Set yyyy=%DAT:~-4%& set /a mm=100%DAT:~3,2%%%100& set /a dd=100%DAT:~,2%%%100
set /A Days=%~2+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
exit /B
Для удаление архивов в текущей папке, старее 5 дней раскомментируйте строку №11.
0
59 / 58 / 9
Регистрация: 11.12.2009
Сообщений: 350
19.01.2013, 11:39 10
Всем еще раз привет!
раньше использовал эту команду:
Bash
1
2
3
forfiles
теперь же копии делаются на сетевое хранилище и эта каманда не применима, можно в ней что то подправить или сделать как-то иначе для удаления последних 7ми старых копий:
forfiles /P "\\192.168.0.22\all\copy" /M *.rar /D -7 /C "cmd /c del /F /Q @path"
заранее спасибо.
0
19.01.2013, 11:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2013, 11:39
Помогаю со студенческими работами здесь

Записи. Определить дату, которая была за m дней до сегодняшнего дня
Написать программу, определяющую дату, которая была за m дней до сегодняшнего дня

Записи: получить дату, которая была за m дней до сегодняшнего дня
Приветствую всех. У меня вызвало затруднение такая задачка: Написать прорамму: получающую дату,...

Распаковка архива с именем архива по маске
Всем привет! Понимаю, что тема с архивами уже избитая, но все же есть определенная задача. Прошу...

Найти дату, которая будет через m дней после указанной даты
Найти дату, которая будет через m дней после указанной даты.

Написать программу, которая вычисляет сколько дней осталось до нового года от введенной пользователем даты.
Написать программу, которая вычисляет сколько дней осталось до нового года от введенной...

Написать программу , позволяющую определить дату , которая наступит через X дней после текущей даты
Добрый день ! Вот условие: Написать программу , позволяющую определить дату , которая наступит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru