Пакетный файл для удаления старых и разных папок в каталоге - PullRequest
0 голосов
/ 19 мая 2011

Я хочу написать командный файл 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 ]

1 голос
/ 01 сентября 2012

Сценарий ниже получит текущую локальную дату в ГГГГММДД (любезно предоставлено этот ответ ).

Затем он перебирает все папки в данном каталоге (в моем случае этотестовая подпапка под папкой, содержащей скрипт) и проверяет последние 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
0 голосов
/ 19 мая 2011

Я бы не стал использовать пакетный скрипт для чего-либо, кроме самого простого.

Я рекомендую вам взглянуть на язык сценариев, такой как Python.

...