Показать полную графическую версию : [решено] Нужно удалить лог файлы старше 30 дней
ksv_sergo
05-04-2011, 15:11
Доброе времья суток.
Помогите с батником.
Имеються лог файлы большого размера, их нужно удалять но только не все а те которые старше 30-40 дней.
C:\PROGRAMM\logs
so_110401.dmp
Results_110331.dmp
white155
05-04-2011, 17:17
Синтаксис
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
white155 ,
Огромное спасибо !!! :yahoo:
white155
05-04-2011, 18:18
вот только правильно не могу параметры задать, постоянно всяческие ошибки выдает, то время не то, то маска не работает
white155
05-04-2011, 23:42
надо удалять все файлы в папке созданные ранее одной недели
forfiles /p C:\backup\ /m *.* /s /c "del /F /Q" /d -7
выходит ошибка, не может найти указанный файл, что-то не так с командой del
С командой «del» всё в порядке:
… -c"%comspec% /c echo @PATH\@FILE" …
Просто Вы плохо прочитали написанное Вами же выше (http://forum.oszone.net/post-1651609.html#post1651609).
Команда «del» — не внешняя программа, а реализована как внутренняя команда командного процессора, потому работоспособна только из-под него.
ksv_sergo
06-04-2011, 10:50
Посоветуйте ещё как удалить папки старше 30 дней ???
Или как удалить только пустые папки в которых нету файлов
Сперва не досмотрел в папке C:\PROGRAMM\logs есть также папки типа - 2010_06_06 (гггг_мм_дд)
Как их удалить, но не все, нужно чтобы остальсь за последние 30 дней (можно ли както привязаться по дате сосданию, а не по названию)
dmitryst
20-08-2014, 12:51
Сваял похожий скрипт:
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: - примонтированный сетевой диск, если что.
походу запуск в шедулере проходит для незарегистрированного пользователя. или используй абсолютное сетевое имя или перед 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"
В чем может быть подвох? Z: - примонтированный сетевой диск, если что. »
Именно в этом и может быть.
dmitryst
21-08-2014, 11:59
походу запуск в шедулере проходит для незарегистрированного пользователя. »
нет, под моим юзером, еще раз перепроверил, сменил на администратора, проверю сегодня.
или используй абсолютное сетевое имя или перед forfiles используй net use. »
если использовать \\server\mirror\backups - в истории шедулер пишет "Incorrect directory" или что-то в этом духе. net use по второму кругу использовать? (диск-то и так уже прикручен, и до этого еще одна задача пишет туда бекап... размонтировать/смонтировать, что ли?)
есть еще вариант что для пользователя от имени которого выполняется задача в шедулере нету доступа к шаре »
не-не, у юзера доступ точно есть, другая задача пишет туда файло на неколько Гб, без проблем, а эта как раз должна подтирать предыдущие.
Самое интересное, что в шедулере Last Run result = (0x1), рецепт по ссылке (http://social.technet.microsoft.com/Forums/windowsserver/en-US/57c65328-d8c8-4e13-9b51-e017ae6c298c/task-scheduler-returns-0x1-code-when-run-whehter-user-is-logged-on-or-not-options-selected?forum=winserverManagement) не прокатил, попробую еще сменить юзера на админа - может, все-таки диск почему-то не виден из-под моего юзера (в проводнике отображается, права на чтение-запись есть, вручную скрипт отлично выполняется).
Именно в этом и может быть. »
если со сменой юзера ничего не изменится, буду применять в самом скрипте монтирование, т.к. URI официально поддерживаются, а значит, сетевой диск тоже легитимный объект ;)
dmitryst, в условиях домена ничего монтировать не нужно в принципе.
Если у пользователя есть доступ к ресурсу — всё работает непосредственно с UNC именами. При настоятельной необходимости использовать UNC ресурс в качестве текущего каталога — либо используется пара pushd/popd, либо посредством GP задаётся параметр реестра «DisableUNCCheck» (Cmd.exe does not support UNC names as the current directory (http://support.microsoft.com/kb/156276/en-us)).
dmitryst
21-08-2014, 12:33
в условиях домена ничего монтировать не нужно в принципе. »
а нет тут домена, и не нужен ;)
В-общем, решилось..
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
forfiles /P "D:\666" /M *.* /S /D -90 /C "cmd /c del /q @PATH"*
Выполнение файла "пролетает" без видимых ошибок, но в результате все файлы остались на месте:
http://savepic.su/7131134m.jpg (http://savepic.su/7131134.htm) http://savepic.su/7128062m.jpg (http://savepic.su/7128062.htm)
mercer.alex
24-03-2016, 15:02
dobermann, может быть так -
forfiles /P "D:\666" /S /D -90 /C "cmd /c del /f /a /q @file"
в конце не @path, а @file
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.