我有一个备份文件夹,每天都有一个备份文件夹(如15.06 .; 14.06; 13.06 .....),其中包含备份文件。
我现在想要删除(在.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"
问候
编辑:我现在正在测试的是:
set Pf_ZielBackup=Z:\Backups\F\WichtigVer\Robo\Version\
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”运行脚本,它会在命令提示符中列出三个最旧的文件就好了。有人知道如何解决这个问题吗?
Edit2 Now脚本运行但删除所有文件夹 - 我必须在它删除10个文件夹(应该删除0)后停止它...在子目录中 - 计数器逻辑的东西一定是错的我想:
set Pf_ZielBackup=Z:\Backups\F\WichtigVer\Robo\Version\
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
set Pf_ZielBackup=Z:\Backups\F\WichtigVer\Robo\Version\ 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