у меня есть папка резервного копирования, где на каждый день резервная папка (например, 15.06.; 14.06; 13.06.....), содержащий резервные файлы.
теперь я хочу a удалить (in .cmd файл) количество X старых папок, так что есть еще 30 новейших файлов в папке.
пробовал:
set Pf_TargetForfiles=Z:Backups
set AnzahlOrdner=
for /d %%a in (Z:TargetForfiles*) do set /a AnzahlOrdner+=1
If %AnzahlOrdner% GTR 30 forfiles /p "%Pf_ZielForfiles%" /d -42 /c "CMD /c if @isdir==TRUE rd @path /s /q"
поздравления
Edit: то, что я сейчас тестирую, это:
set Pf_ZielBackup=Z:BackupsFWichtigVerRoboVersion
echo off
Setlocal EnableDelayedExpansion
set "_count=0"
rem count the files
for /f "tokens=*" %%a in ('dir %Pf_ZielBackup% /a:d /b /o:d') do @(set /a _count+=1 >nul)
echo !_count! directories found
rem delete _count-27 files
for /f "tokens=*" %%a in ('dir %Pf_ZielBackup% /a:d /b /o:d') do (
set /a _count-=1
echo directory !_count! is %%a
echo rd /q %%a
if "!_count!"=="27" (
goto :done
)
)
:done
pause
этот код имеет - для меня очень странная проблема, что когда я уберите " эхо " из echo rd /q %%a
что тогда я получаю сообщение об ошибке от Windows (система не может найти указанный файл. Но если я запускаю скрипт с "echo", он перечисляет меня в commandprompt, три самых старых файла просто отлично. Кто-нибудь знает как это исправить?
Edit2 теперь скрипт запускается, но удаляет все папки - я должен был остановить его после того, как он удалил 10 папок (должен был удалить 0)... в подкаталоге-что-то с логикой счетчика должно быть не так Угадай:
set Pf_ZielBackup=Z:BackupsFWichtigVerRoboVersion
echo off
Setlocal EnableDelayedExpansion
set "_count=0"
rem count the files
for /f "tokens=*" %%a in ('dir %Pf_ZielBackup% /a:d /b /o:d') do @(set /a _count+=1 >nul)
echo !_count! directories found
rem delete _count-30 files
for /f "tokens=*" %%a in ('dir %Pf_ZielBackup% /a:d /b /o:d') do (
set /a _count-=1
echo directory !_count! is %Pf_ZielBackup%%%a
rd /s /q %Pf_ZielBackup%%%a
if "!_count!"=="30" (
goto :done
)
)
:done
pause