Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] bat с удалением нескольких файлов (http://forum.oszone.net/showthread.php?t=237436)

mataranga 28-06-2012 07:10 1941828

bat с удалением нескольких файлов
 
День добрый, проблема заключается в том что есть много файлов:

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 1941870

Цитата:

Цитата mataranga
написать такой 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 1941922

Может я немного не понял...

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

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


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

gora 28-06-2012 11:39 1941930

Может у Вас неправильно указан путь (или в пути есть спец символы), имена папок, может нет файлов в них соответствующих дате, но у меня по приведенным Вами данным имен файлов и папок находит и выводит в окно консоли:
Код:

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"

Цитата:

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

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

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

mataranga 28-06-2012 12:07 1941953

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

gora 28-06-2012 12:08 1941955

Цитата:

Цитата mataranga
консоль пишет DEL ... но он не удалил файлы »

Цитата:

Цитата gora
Echo удалить после проверки. »


mataranga 28-06-2012 12:21 1941961

Простите великодушно, я понимаю что должен подтвердить удаление... но не понимаю как :)

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

gora 28-06-2012 12:26 1941966

Цитата:

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

Удалите в батнике слово Echo в одной строке, где оно присутствует, и строка должна стать такой:
Код:

                If !N_Date! LSS %N_lastDate% Del /Q "%%i"
После этого в консоль не будет ни чего выводится, а будут удаляться файлы.
Слово Echo в этом скрипте просто "экранировало" команду удаления (не давало ей выполняться) для удобства отладки скрипта.

mataranga 28-06-2012 12:52 1941991




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


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

gora 28-06-2012 13:00 1942001

Цитата:

Цитата mataranga
заметил ошибку свою... у меня формат даты не 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 1942041

Огромная благодарность!
Все получилось.


Время: 07:34.

Время: 07:34.
© OSzone.net 2001-