1. Этот скрипт не справляется вообще никак при работе с файлами очень больших размеров - А почему бы не воспользоваться vbs или js ?
2. Как понять: Когда очень много директорий, то приходиться прописывать условие и цикл для каждой директории, Речь идёт о директориях, находящихся в папке, описываемой в set BackUp=MyDisk:\MyBackUp, судя по организации цикла 'dir /ad /b /o-d вложенные директории не анализируются? Почему бы не написать нечто подобное:
Код:
![Выделить весь код](images/misc/selectcode.png)
@Echo Off
Do Call :SubRoutine "C:\Program Files"
Do Call :SubRoutine "C:\Windows"
GoTo :Eof
:SubRoutine
Set Num=10
Pushd %1
Echo --------------------------------------------------->>%~dpn0.log
Echo %1>>%~dpn0.log
Echo --------------------------------------------------->>%~dpn0.log
For /F "usebackq delims=" %%d in (`Dir /b /A:D /O:-D`) Do Call :Proceed "%%d"
Popd
GoTo :Eof
:Proceed
Set /A Num-=1
If %Num% GEQ 0 GoTo :Eof
Echo %Date% %Time%: Erase %1>>%~dpn0.log
rem rd /s /q %1 2>nul >nul
либо
Код:
![Выделить весь код](images/misc/selectcode.png)
@Echo Off
For %%i In ("C:\Program Files" "C:\Windows") Do Call :SubRoutine %%i
GoTo :Eof
Далее подпрограммы взять из предыдущего кода
По понятным причинам (я указал директории "C:\Program Files" "C:\Windows" чтобы посмотреть выборку) удаление я заремил - подправьте в Вашем реальном случае
3. Как понять: но оставляя всегда нужное фиксированное количество резерва - в чем резерв измеряется? Похоже, вы удаляете 10 старых директорий и иначе их никак не анализируете.