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

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

ksv_sergo 05-04-2011 15:11 1651552

Нужно удалить лог файлы старше 30 дней
 
Доброе времья суток.

Помогите с батником.
Имеються лог файлы большого размера, их нужно удалять но только не все а те которые старше 30-40 дней.
C:\PROGRAMM\logs


so_110401.dmp
Results_110331.dmp

white155 05-04-2011 17:17 1651609

Синтаксис
forfiles [/p путь] [/m маска_поиска] [/s] [/c команда] [/d[{+ | -}] [{ММ/ДД/ГГГГ | ДД}]]

Forfiles -p c:\backup -s -m *.* -d -5 -c "cmd /c del /q @path"

ksv_sergo 05-04-2011 17:22 1651612

white155 ,
Огромное спасибо !!! :yahoo:

white155 05-04-2011 18:18 1651652

вот только правильно не могу параметры задать, постоянно всяческие ошибки выдает, то время не то, то маска не работает

white155 05-04-2011 23:42 1651862

надо удалять все файлы в папке созданные ранее одной недели
forfiles /p C:\backup\ /m *.* /s /c "del /F /Q" /d -7

выходит ошибка, не может найти указанный файл, что-то не так с командой del

Iska 06-04-2011 00:59 1651892

С командой «del» всё в порядке:
Код:

… -c"%comspec% /c echo @PATH\@FILE" …
Просто Вы плохо прочитали написанное Вами же выше.


Команда «del» — не внешняя программа, а реализована как внутренняя команда командного процессора, потому работоспособна только из-под него.

ksv_sergo 06-04-2011 10:50 1652072

Посоветуйте ещё как удалить папки старше 30 дней ???
Или как удалить только пустые папки в которых нету файлов

Сперва не досмотрел в папке C:\PROGRAMM\logs есть также папки типа - 2010_06_06 (гггг_мм_дд)

Как их удалить, но не все, нужно чтобы остальсь за последние 30 дней (можно ли както привязаться по дате сосданию, а не по названию)

dmitryst 20-08-2014 12:51 2391686

Сваял похожий скрипт:

del_old.cmd:
Код:

forfiles /p "Z:\SQL_back" /S /D -5 /C "cmd /c del /f /a /q @file"
Закинул в планировщик Windows 2008 R2, ошибок не выдает, но и не удаляет нифига.... Вручную запускаю del_old.cmd - всё удаляется. В чем может быть подвох? Z: - примонтированный сетевой диск, если что.

Elven 20-08-2014 14:36 2391745

походу запуск в шедулере проходит для незарегистрированного пользователя. или используй абсолютное сетевое имя или перед forfiles используй net use. есть еще вариант что для пользователя от имени которого выполняется задача в шедулере нету доступа к шаре, тогда только вариант с net use с именем пользователя и пароля.

Код:

forfiles /p "\\server\share\SQL_back" /S /D -5 /C "cmd /c del /f /a /q @file"
Код:

net use Z: \\server\share /user:domain\user password
forfiles /p "Z:\SQL_back" /S /D -5 /C "cmd /c del /f /a /q @file"


Iska 20-08-2014 17:44 2391868

Цитата:

Цитата dmitryst
В чем может быть подвох? Z: - примонтированный сетевой диск, если что. »

Именно в этом и может быть.

dmitryst 21-08-2014 11:59 2392180

Цитата:

Цитата Elven
походу запуск в шедулере проходит для незарегистрированного пользователя. »

нет, под моим юзером, еще раз перепроверил, сменил на администратора, проверю сегодня.

Цитата:

Цитата Elven
или используй абсолютное сетевое имя или перед forfiles используй net use. »

если использовать \\server\mirror\backups - в истории шедулер пишет "Incorrect directory" или что-то в этом духе. net use по второму кругу использовать? (диск-то и так уже прикручен, и до этого еще одна задача пишет туда бекап... размонтировать/смонтировать, что ли?)

Цитата:

Цитата Elven
есть еще вариант что для пользователя от имени которого выполняется задача в шедулере нету доступа к шаре »

не-не, у юзера доступ точно есть, другая задача пишет туда файло на неколько Гб, без проблем, а эта как раз должна подтирать предыдущие.

Самое интересное, что в шедулере Last Run result = (0x1), рецепт по ссылке не прокатил, попробую еще сменить юзера на админа - может, все-таки диск почему-то не виден из-под моего юзера (в проводнике отображается, права на чтение-запись есть, вручную скрипт отлично выполняется).

Цитата:

Цитата Iska
Именно в этом и может быть. »

если со сменой юзера ничего не изменится, буду применять в самом скрипте монтирование, т.к. URI официально поддерживаются, а значит, сетевой диск тоже легитимный объект ;)

Iska 21-08-2014 12:10 2392186

dmitryst, в условиях домена ничего монтировать не нужно в принципе.

Если у пользователя есть доступ к ресурсу — всё работает непосредственно с UNC именами. При настоятельной необходимости использовать UNC ресурс в качестве текущего каталога — либо используется пара pushd/popd, либо посредством GP задаётся параметр реестра «DisableUNCCheck» (Cmd.exe does not support UNC names as the current directory).

dmitryst 21-08-2014 12:33 2392205

Цитата:

Цитата Iska
в условиях домена ничего монтировать не нужно в принципе. »

а нет тут домена, и не нужен ;)

В-общем, решилось..


Код:

net use x: \\serv\mirror\SQL_back password /user:backup_user

rem forfiles /p x:\ /s /d -5 /c "cmd /c del /f /a /q @file"

net use x: /delete

Монтируем диск как Х:, удаляем с этого диска все файлы старше 5и дней и размонтируем нафиг... Аналогично придется сделать и в других задачах (не получается смотировать диск два раза, например, как X: для одной задачи и как Z: для другой, повторно тот же УРЛ монтироваться не хочет)

Всем спасибо за подсказки!

dobermann 21-03-2016 16:34 2618303

Цитата:

forfiles /P "D:\666" /M *.* /S /D -90 /C "cmd /c del /q @PATH"*
Выполнение файла "пролетает" без видимых ошибок, но в результате все файлы остались на месте:


mercer.alex 24-03-2016 15:02 2619357

dobermann, может быть так -
Код:

forfiles /P "D:\666" /S /D -90 /C "cmd /c del /f /a /q @file"
в конце не
Код:

@path
, а
Код:

@file


Время: 15:53.

Время: 15:53.
© OSzone.net 2001-