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

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

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

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


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

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


В папку каждый день записываются новые файлы. Требуется в конце каждого месяца удалить все файлы, кроме файлов за первый день месяца (первым днем может быть как 1-е число, так и 2-е) Как это реализовать?

Отправлено: 11:43, 09-11-2010

 

Googler


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

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


Sirimika, от чего плясать?.. от даты копирования на диск, даты изменения (см. описание ключа /T из "HELP DIR") или дату можно выдернуть из имени файла?.. просто все эти даты могут существенно отличаться друг от друга... например, если архивирование начать сегодня вечером, то закончиться оно может завтра утром, а на сетевую шару файл архива может попасть и вовсе послезавтра (в зависимости от скорости канала и т.д.)

Отправлено: 12:18, 09-11-2010 | #2



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

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


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


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

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


В названии файла дата имеется и она совпадает с датой изменения документа, так что смотреть можно по любой. Формат даты в названии xxxx-20101207.bak.
xxxx - это собственно название файла
дата соответственно получается в формате гмд

Последний раз редактировалось Sirimika, 09-11-2010 в 12:55.


Отправлено: 12:21, 09-11-2010 | #3


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
Set src=e:\Temp\1
If Exist "%src%\*%Date:~6,4%%Date:~3,2%01.bak" (Set msc=01) Else Set msc=02
For /R "%src%" %%a In (*.bak) Do (
	Set tna=%%~na
	If Not !tna:~-8!==%Date:~6,4%%Date:~3,2%%msc% Del /F /Q "%%a"
)
Проверит наличие файлов .bak за первое число текущего месяца и года и при наличии таковых удалит все остальные файлы .bak из папки. Если за первое число файлов .bak нет, то удалит все файлы .bak кроме файлов за второе число текущего месяца и года.

Отправлено: 14:21, 09-11-2010 | #4


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


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

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


Цитата gora:
"%src%\*%Date:~6,4%%Date:~3,2%01.bak" »
Не очень понятно, что значит данная запись, распишите пожалуйста

Отправлено: 15:31, 09-11-2010 | #5


Аватара для gora

Ушёл из жизни


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

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


Цитата Sirimika:
Не очень понятно, что значит данная запись, распишите пожалуйста »
%src% - путь к Вашей папке (в моем случае это e:\Temp\1)
* - любые символы в любом количестве, например, Ваши xxxx- заменяются одной этой звездочкой
%Date:~6,4% - текущий год (4 цифры)
%Date:~3,2% - текущий месяц (2 цифры)
01 - первое число месяца

В итоге получаем : "e:\Temp\1\*20101101.bak"
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:42, 09-11-2010 | #6


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


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

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


еще наверно глупый вопрос задам.
Почему значения именно 6 и 3?

Отправлено: 16:09, 09-11-2010 | #7


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
Формат переменной %Date% для русской локализации     -   09.11.2010
Отсчет номера символа с левого края (начинается с 0) -   0123456789
Подробнее: Set /?
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:19, 09-11-2010 | #8


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


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

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


еще вопрос возникает. Всегда должно оставаться три файла, например:
базаА-20101207.bak
базаБ-20101207.bak
базаС-20101207.bak.

Но проблема может быть в том, что одна из баз сделает бэкап например следующим днем(изменят расписание или еще что-нить), если воспользоваться скриптом, который сейчас, то у меня останется только 2 файла. А надо чтобы всегда было со всех баз, даже если у них разница в день или несколько дней. У меня всегда должны быть быкапы всех трех баз от начала месяца

Отправлено: 16:23, 09-11-2010 | #9


Googler


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

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


Цитата Sirimika:
Всегда должно оставаться три файла »
если понимать так, что на каждые месяц/базу оставить один 1-й файл:
Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion

for /f "delims=" %%a in ('dir /b/on *.bak') do (
  set "$na=%%~na"& set "$x=$_!$na:~0,-2!"
  if not defined !$x! (set "!$x!=X") else del "%%a"
)
P.S. в имени файла архива не должно быть пробелов/спецсимволов

Отправлено: 05:00, 10-11-2010 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как удалить из папки все файлы определенного размера? Alex_smo Скриптовые языки администрирования Windows 6 29-07-2014 19:50
Невозможно удалить некоторые файлы и папки -? Utuwa Лечение систем от вредоносных программ 4 10-05-2009 13:02
[решено] Вывести все файлы и папки morgan1991 AutoIt 6 18-03-2009 22:35
[решено] Как удалить файлы с папки...? Cobra_1_Stas Автоматическая установка Windows 2000/XP/2003 40 10-10-2006 10:11
В NC не отображаются все файлы из папки i386 vivanco3 Хочу все знать 16 01-04-2004 21:01




 
Переход