Показать полную графическую версию : [решено] 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 и так же перечислить папки...
Но как лучше сделать?
Заранее спасибо.
написать такой 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...
Может у Вас неправильно указан путь (или в пути есть спец символы), имена папок, может нет файлов в них соответствующих дате, но у меня по приведенным Вами данным имен файлов и папок находит и выводит в окно консоли: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 ... но он не удалил файлы
консоль пишет DEL ... но он не удалил файлы »
Echo удалить после проверки. »
mataranga
28-06-2012, 12:21
Простите великодушно, я понимаю что должен подтвердить удаление... но не понимаю как :)
Это в коде надо добавить строчки?
или в cmd окне что-то нажать?
Это в коде надо добавить строчки?
или в 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 ...
А так все вроде работает :) у меня он по честному удалял все файлы :)
это долго исправить? :(
заметил ошибку свою... у меня формат даты не 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.