Войти

Показать полную графическую версию : [решено] bat с удалением нескольких файлов


mataranga
28-06-2012, 07:10
День добрый, проблема заключается в том что есть много файлов:

01.02.2012Иванова.И.И.doc
03.02.2012Петров.П.И.doc
05.03.2012Никифоров.П.П.doc
. . .
и так далее... файлы находятся в папках с названиями

mail@mail.ru
yandex@yandex.ru
google@google.ru
. . .
и так далее...

как написать такой bat файл который удалял бы файлы до определенной даты... то есть по названию файлы...

можно конечно и вставить 01.02.2012 и по 31.02.2012 и так же перечислить папки...
Но как лучше сделать?

Заранее спасибо.

gora
28-06-2012, 09:41
написать такой bat файл который удалял бы файлы до определенной даты... то есть по названию файлы... »
Попробуйте так:
@Echo Off
SetLocal EnableDelayedExpansion
:: Каталог с обрабатываемыми папками
Set Folder=e:\Temp
:: Последняя дата, ранее которой все файлы будут удалены
Set lastDate=02.02.2012
Call :_norml %lastDate% N_lastDate
:: Список папок для удаления файлов. Если в имени пробел, то его заключить в кавычки
For %%f In (
mail@mail.ru
yandex@yandex.ru
google@google.ru
"google @google.ru"
) Do (
For %%i In ("%Folder%\%%~f\*.doc") Do (
Call :_norml "%%~ni" N_Date
If !N_Date! LSS %N_lastDate% Echo Del /Q "%%i"
)
)
Pause>Nul

:_norml
Set dat=%~1
Set %2=%dat:~6,4%%dat:~3,2%%dat:~0,2%
GoTo :EOF
Echo удалить после проверки.

mataranga
28-06-2012, 11:22
Может я немного не понял...

я создал бат - файл и скопировал код туда... указав пути к папкам...

при запуске он открыл cmd... и после нажатия кнопки закрывает его и не чего не происходит.


а он учитывает строго 02.03.2012.doc или 02.03.2012Иванов.И.И.doc...

gora
28-06-2012, 11:39
Может у Вас неправильно указан путь (или в пути есть спец символы), имена папок, может нет файлов в них соответствующих дате, но у меня по приведенным Вами данным имен файлов и папок находит и выводит в окно консоли:Del /Q "e:\Temp\mail@mail.ru\01.02.2012Иванова.И.И.doc"
Del /Q "e:\Temp\yandex@yandex.ru\01.02.2012Иванова.И.И.doc"
Del /Q "e:\Temp\google@google.ru\01.02.2012Иванова.И.И.doc"


а он учитывает строго 02.03.2012.doc или 02.03.2012Иванов.И.И.doc... »
Расширение у файла должно быть .doc , и начинаться имя должно с даты (10 символов) в указанном Вами формате. Остальное в имени игнорируется.

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

mataranga
28-06-2012, 12:07
хм... проверил ... в другую папку сунуть файлы, учел все замечания...
теперь консоль пишет DEL ... но он не удалил файлы

gora
28-06-2012, 12:08
консоль пишет DEL ... но он не удалил файлы »
Echo удалить после проверки. »

mataranga
28-06-2012, 12:21
Простите великодушно, я понимаю что должен подтвердить удаление... но не понимаю как :)

Это в коде надо добавить строчки?
или в cmd окне что-то нажать?

gora
28-06-2012, 12:26
Это в коде надо добавить строчки?
или в cmd окне что-то нажать? »
Удалите в батнике слово Echo в одной строке, где оно присутствует, и строка должна стать такой: If !N_Date! LSS %N_lastDate% Del /Q "%%i" После этого в консоль не будет ни чего выводится, а будут удаляться файлы.
Слово Echo в этом скрипте просто "экранировало" команду удаления (не давало ей выполняться) для удобства отладки скрипта.

mataranga
28-06-2012, 12:52
http://savepic.net/2999842m.jpg (http://savepic.net/2999842.htm)


Ой только заметил ошибку свою... у меня формат даты не 01.01.2012 а 01.01.12 ...
А так все вроде работает :) у меня он по честному удалял все файлы :)


это долго исправить? :(

gora
28-06-2012, 13:00
заметил ошибку свою... у меня формат даты не 01.01.2012 а 01.01.12 »
Тогда исправьте в скрипте в двух строках:Set lastDate=02.02.12

...

Set %2=%dat:~6,2%%dat:~3,2%%dat:~0,2%

mataranga
28-06-2012, 13:42
Огромная благодарность!
Все получилось.




© OSzone.net 2001-2012