AlexPebody |
10-05-2012 12:27 1913352 |
Удаление файлов по дате
Всем приветы, помогите пожалуйста с вопросом...
В папке есть масса файлов разной даты, как сделать батник чтобы 10 файлов с последней датой оставлял - самые свежие,
остальные удалял? Причем если в папке меньше 10 файлов, чтобы оставлял все.
Т.е. по другому опишу задачу: в папке есть пачка файлов, нужно оставить последние 10 по самой свежей дате, включая текущий день,
старшие фалы удалить, но если в папке менее 10 файлов, то оставлять их все.
Помогите плз? Заранее буду ОЧЕНЬ благодарен, с меня +
|
AlexPebody, например, непосредственно из командной строки для текущего каталога так (уберите «echo» для реального удаления):
Код:
for /f "skip=10 delims==" %i in ('dir /b /a:-d /o:-d') do @echo del /f /q "%i"
|
Цитата:
Цитата AlexPebody
Мне нужно чтобы из батника работал »
|
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
set sFolder=%~1
if defined sFolder (
if exist "%sFolder%\." (
for /f "skip=10 delims==" %%i in ('dir /b /a:-d /o:-d "%sFolder%\*.*"') do echo del /f /q "%%i"
) else (
echo Folder [%sFolder%] not found
)
) else (
echo Usage: %~nx0 ^<Path to Folder^>
)
endlocal
exit /b 0
Папку указываете параметром пакетного файла. Для реального удаления уберите «echo» перед «del …».
Цитата:
Цитата AlexPebody
и возможно ли прикрутить рекурсию на вложенные папки? »
|
Достаточно странно выглядит условие сохранения 10 последних файлов для дерева папок. В таком виде — нет, нельзя: первичная сортировка при рекурсии в «dir» всегда будет по пути. Потребуются иные средства.
|
Цитата:
Цитата AlexPebody
Т.е. в командной строке указать исполняемый файл bat, пусть скрипт будет del.bat и саму папку? »
|
Да. Но старайтесь избавляться от привычки именовать пакетные файлы именами внутренних команд или внешних исполняемых файлов. Назовите пакетный файл как-то иначе. Да и расширение для ясности лучше давать «.cmd». То же относится и к именованию каталогов.
Цитата:
Цитата AlexPebody
в папке дир лежат файлы для удаления, »
|
Сколько их?
|
AlexPebody |
10-05-2012 13:43 1913400 |
Цитата:
Цитата Iska
Да. Но старайтесь избавляться от привычки именовать пакетные файлы именами внутренних команд или внешних исполняемых файлов. Назовите пакетный файл как-то иначе. Да и расширение для ясности лучше давать «.cmd». То же относится и к именованию каталогов. »
|
Запускаю del_bat.cmd "dir" рядом с файлом скрипта лежит папка dir с файлами, удалил echo в скрипте, ничего не происходит с файлами :( просто cmd окно промелькнет и все... :(
Запускаю вот так прямо из командной строки cmd: for /f "skip=10 delims==" %%i in ('dir /b /a:-d /o:-d') do del /f /q "%%i" удаляет 10 файлов, а пакетником не работает... :(
Подскажите что может быть?
Все, доделал сам! Спасибо большое!!!
Для некой рекурсии применил вот это:
Код:
For /R %%i In (.) Do Copy *.cmd "%%i"
For /R %%i In (*.cmd) Do (
PUSHD %%~dpi
If /I Not "%%~dpi"=="%~dp0" CMD /C "%%i"
POPD
)
|
MMX-Dimitrov |
25-07-2013 16:19 2190528 |
Опечатка небольшая в коде: нужно в цикле тоже прописать каталог, иначе будет срабатывать только для текущего каталога и толку от параметра никакого =)
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
set sFolder=%~1
if defined sFolder (
if exist "%sFolder%\." (
for /f "skip=10 delims==" %%i in ('dir %sFolder% /b /a:-d /o:-d') do echo del /f /q "%sFolder%\%%i"
) else (
echo Folder [%sFolder%] not found
)
) else (
echo Usage: %~nx0 ^<Path to Folder^>
)
endlocal
exit /b 0
|
MMX-Dimitrov, верно, это я прошляпил.
Поправил.
|
Время: 16:33.
© OSzone.net 2001-