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

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

AlexPebody 10-05-2012 12:27 1913352

Удаление файлов по дате
 
Всем приветы, помогите пожалуйста с вопросом...

В папке есть масса файлов разной даты, как сделать батник чтобы 10 файлов с последней датой оставлял - самые свежие,
остальные удалял? Причем если в папке меньше 10 файлов, чтобы оставлял все.

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

Помогите плз? Заранее буду ОЧЕНЬ благодарен, с меня +

Iska 10-05-2012 12:45 1913362

AlexPebody, например, непосредственно из командной строки для текущего каталога так (уберите «echo» для реального удаления):
Код:

for /f "skip=10 delims==" %i in ('dir /b /a:-d /o:-d') do @echo del /f /q "%i"

Iska 10-05-2012 13:17 1913383

Цитата:

Цитата 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» всегда будет по пути. Потребуются иные средства.

Iska 10-05-2012 13:39 1913396

Цитата:

Цитата 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


Iska 25-07-2013 16:33 2190539

MMX-Dimitrov, верно, это я прошляпил.

Поправил.


Время: 16:33.

Время: 16:33.
© OSzone.net 2001-