Пакетный файл для удаления старых и разных папок в каталоге
Я хочу написать пакетный файл DOS для удаления старых папок в каталоге, но сохранить самую новую папку. Вот образец моих папок под D:\myfolders\
:
Jack_20110507 (previous day time-stamped folder)
Jack_20110508 (current day time-stamped folder)
James_20110507
James_20110508
Kenny_20110507
Kenny_20110508
...
Я хочу удалить все папки с отметками времени предыдущего дня *_20110507
, но сохраняйте все папки с метками времени текущего дня *_20110508
, Новые папки с метками времени создаются ежедневно.
2 ответа
Скрипт ниже получит текущую локальную дату в ГГГГММДД (любезно предоставлено этим ответом).
Затем он перебирает все папки в данном каталоге (в моем случае это была тестовая подпапка под папкой, содержащей скрипт) и проверяет последние 8 символов имени папки. Если они не соответствуют сегодняшней дате, папка удаляется.
/Q
отключает подтверждение удаления папки. Если вы хотите получить подтверждение перед удалением папки, удалите это.
@ECHO off & setlocal EnableDelayedExpansion
REM Get the local datetime
FOR /F "usebackq tokens=1,2 delims==" %%i IN (`wmic os get LocalDateTime /VALUE 2^>NUL`) DO IF '.%%i.'=='.LocalDateTime.' SET ldt=%%j
REM Set the datetime to YYYYMMDD format.
SET today=%ldt:~0,4%%ldt:~4,2%%ldt:~6,2%
REM For every file in the folder test:
FOR /D %%f IN (.\test\*) DO (
REM Store the folder name temproarily
SET folder=%%f
REM Get just the ending date part of the folder name
SET folderpart=!folder:~-8!
REM If it doesn't match todays date, delete the folder.
IF NOT !folderpart!==!today! RD /Q %%f
)
@ECHO ON
Я бы не стал использовать пакетный скрипт для чего-то, кроме самых простых вещей.
Я рекомендую вам взглянуть на язык сценариев, такой как Python.