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

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

Ответить
Настройки темы
CMD/BAT - [решено] Удаление по дате

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


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

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


Добрый день!
Нашел статью Ссылочка, там удаление папок старше n дней, но поиск делается по маске имени, можно ли сделать, что бы удаление было по дате создания ?

Код: Выделить весь код
@Echo Off

Set Arhiv=D:\arhiv
Set DeltaDay=-10

SetLocal EnableDelayedExpansion
Call :FromNow %DeltaDay% %Date%

FOR /F "usebackq delims=" %%d IN (`Dir "%Arhiv%\" /A:D /B`) DO If %%d LSS %yyyymmdd% Rd "%Arhiv%\%%d" /s /q
GoTo :Eof

:FromNow
rem
rem Пересчет даты на заданное кол-во дней
rem Формат даты dd.mm.yyyy +- дни получим новые yyyymmdd
rem
rem Пример использования
rem 
rem SetLocal EnableDelayedExpansion
rem Set DeltaDay=-10
rem Call :FromNow %DeltaDay% %Date%
rem Echo %Date%  %DeltaDay%  %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 yyyymmdd=%yyyy%%mm:~-2%%dd:~-2%
GoTo :Eof

Отправлено: 11:53, 04-07-2013

 

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


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

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


Ну или хотя бы, подскажите, где нужно писать имя папок... например, если мне нужно удалить все папки старше даты d , которые имеют вид base-d

Отправлено: 14:00, 04-07-2013 | #2



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

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


Аватара для sunnykey

Пользователь


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

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


Код: Выделить весь код
#Powershell script.
#Don't forget unlock script executing by 
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension
##########################
#перемеменная OlderThan отвечает за разницу дней от текущей даты,
# в данном примере старше 40 дней
$OlderThan=New-TimeSpan -Days 40
Get-ChildItem -LiteralPath 'C:\My Folder' -Directory | `
    Where-Object {$_.CreationTime -gt ((Get-Date)-$OlderThan)} | `
    Remove-Item -Force -Recurse
На powershell очень просто решается эта задача

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855


Отправлено: 14:02, 04-07-2013 | #3


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


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

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


Цитата sunnykey:
На powershell очень просто решается эта задача »
К сожалению, нужна универсальность в версиях окон.... а на ХП нет "powershell"

Как я понимаю, достаточно в строке
Код: Выделить весь код
FOR /F "usebackq delims=" %%d IN (`Dir "%Arhiv%\" /A:D /B`) DO If %%d LSS %yyyymmdd% Rd "%Arhiv%\%%d" /s /q
Изменить "%Arhiv%\%%d" на "%Arhiv%\base-%%d" но это не работает
Значит, так делать нельзя, потому, что переменную %%d - нельзя так "соединять" с простыми символами, хоть весь путь и стоит в ""....
Как же тогда это сделать ?

Отправлено: 14:30, 04-07-2013 | #4


Аватара для sunnykey

Пользователь


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

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


Цитата greenOwl:
К сожалению, нужна универсальность в версиях окон.... а на ХП нет "powershell" »
Установочный пакет локализованной версии Windows PowerShell 1.0 для ОС Windows XP (KB926140)

-------
cmd умри, powershell живи=)
Powershel 4.0 microsoft.com/ru-ru/download/details.aspx?id=40855


Отправлено: 14:46, 04-07-2013 | #5


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


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

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


в таком случае, можно кинуть ссылку на винду 7 и не париться
нет, хочется, что бы было без установок дополнительного ПО ...

Отправлено: 14:51, 04-07-2013 | #6


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls

Set "DelDate=20140713"

SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq delims=" %%i IN (`Dir /B /T:C /A:D *.* 2^>nul`) DO (
	Set DDir=%%~ti
	Set DDir=!DDir:~6,4!!DDir:~3,2!!DDir:~0,2%!
        If !DDir! LSS %DelDate% @echo Rd "%%i" /S /Q
)
В DelDate вводим дату, после которой папки надо убить, в формате ггггммдд.
Батник в корне той папки, где удаляем подпапки.
Для реального удаления уберите @echo перед RD

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


Отправлено: 15:25, 04-07-2013 | #7


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


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

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


megaloman, да нет, мне нужно не много переделать именно тот код, который написан в первом сообщении...
просто папки будут содержать названия типа "НазваниеБазы_ддммгггг", а вот сам батник будет формироваться другой программой.... которая будет вносить путь и какой давности папки нужно удалить....

Отправлено: 15:50, 04-07-2013 | #8


Ветеран


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

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


Цитата greenOwl:
на ХП нет "powershell" »
Для Windows XP есть PowerShell. И даже вторая версия (а не только та, что по ссылке выше).

Цитата greenOwl:
нет, хочется, что бы было без установок дополнительного ПО ... »
Пора привыкать пользовать. Особенно, если всё ещё держите Windows XP.

Отправлено: 16:14, 04-07-2013 | #9


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


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

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


Iska, в том и дело, что я это делаю не себя, батник будет формироваться автоматически и прописываться в планировщик заданий... а версию ОС выбирать не приходится, может быть как ХП, так и 7, да еще и прав нужных может не быть... + ценнее будет, если на автомате ничего лишнего в ОС пихаться не будет....

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

Отправлено: 16:33, 04-07-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление файлов по дате AlexPebody Скриптовые языки администрирования Windows 6 25-07-2013 16:33
CMD/BAT - Удаление файлов по дате interminable Скриптовые языки администрирования Windows 1 07-06-2012 15:48
CMD/BAT - [решено] Удаление файлов по дате больших размеров. Sony777 Скриптовые языки администрирования Windows 11 03-06-2012 16:23
CMD/BAT - [решено] Удаление папки по дате Obnin Скриптовые языки администрирования Windows 8 14-12-2011 13:21
CMD/BAT - Удаление файлов по дате ADGJMPTW Скриптовые языки администрирования Windows 1 10-10-2010 20:08




 
Переход