Как посчитать количество папок с определенным именем и удалить самые старые - PullRequest
0 голосов
/ 20 февраля 2019

Мне требуется командный файл, который будет считать папки с определенным именем, и если их несколько, самый старый должен быть удален.Папки имеют имена:

"01. Daily Backup 20190219", 
"01. Daily Backup 20190218" and 
"01. Weekly Backup 20190210". 

Из них мне нужно только удалить папку "01. Daily Backup 20190218".

Подсчет всех папок довольно прост с помощью:

for /f %%a in ('dir /b /ad %folder%^|find /c /v "" ') do set count=%%a
echo %count%

Я не могу добавить условия подсчета, основанные на именах папок, например, «01. Daily *», ни удалить старые файлы.Помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019
@echo off
REM Location of Reliplan folders and files
set "dir=c:\temp\"
set "name=01. Daily Backup*"
:start
 for /f "delims=" %%i in ('dir /b /ad /o-d "%dir%%name%"') do set "todel=%%i"
 for /f %%a in ('dir /b /ad "%dir%%name%" ^| find /c /v ""') do set "count=%%a"
if %count% gtr 1 goto del
goto further
:del
rd /s /q "%dir%%todel%"
goto start
:further
if "%name%"=="01. Daily Backup*" (
   set "name=01. Weekly Backup*"
   goto start
)
if "%name%"=="01. Weekly Backup*" (
   goto end
)

: конец

0 голосов
/ 20 февраля 2019

Вот сценарий, использующий папки, которые начинаются только с 01. Daily Backup*, видя, что это единственный пример, который вы привели.

@echo off
set "folder=01. Daily Backup*"

 for /f "delims=" %%i in ('dir /b /ad /o-d "%folder%"') do set "todel=%%i"
 for /f %%a in ('dir /b /ad "%folder%" ^| find /c /v ""') do set "count=%%a"
 if %count% gtr 1 echo rmdir /S "%todel%"

Таким образом, мы будем dir все папки, упорядоченные по дате (сначала самые новые)) установить только последнюю папку в качестве переменной.затем, если счетчик больше одного, удалите папку, которая была задана в качестве переменной.

Примечание , это еще не выполняет фактическое удаление, оно просто отобразит его, чтобы выполнитькоманда rmdir, удалите echo из последней строки.

Edit Поскольку вы хотите просто сохранить последнюю папку и удалить остальные, просто сделайте это (снова удалите @echo со строки для выполнения актуальной задачи):

@for /f "skip=1 delims=" %%i in ('dir /b /ad /o-d "01. Daily Backup*"') do (
  @echo @rmdir /s "%%i"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...