我有一个关于在文件夹获取具有相同扩展名的X文件后删除最旧文件的问题,在这种情况下,所有文件共享共享扩展名*.bak
,它们是我的小文件为我的firefox创建它们,它们已经印在标题,创建的日期和时间上,并尽可能地去了。
无论如何,我偶然发现了这个:Batch Script to delete oldest folder in a given folder。而且我正在努力让它来实现我的想法。
问题是我希望批处理使用这一简单的代码行创建一个新文件后,检查哪个文件是最旧的。
copy /y store.json "%DROPBOX%\RES BACKUPS\store.json %date:~-4,4%-%date:~-7,2%-%date:~-10,2%_%time:~0,2%hs-%time:~3,2%min-%time:~6,2%s.bak"
答案 0 :(得分:3)
您可以使用:
@echo off
for /f "delims=" %%a in ('dir /b /a-d /t:w /o:d "%DROPBOX%\RES BACKUPS\*.bak"') do (
del "%%a"
goto :breakLoop
)
:breakLoop
我建议先使用echo del "%%a"
对其进行测试,以确保删除正确的文件。
这是通过获取dir命令的输出来实现的,该命令以裸格式显示所有文件(仅文件名,而不是大小等),首先按最旧文件排序。然后它删除找到的第一个文件,并打破循环。
在超过特定金额时继续删除文件的版本:
@echo off
set "source=%DROPBOX%\RES BACKUPS\*.bak"
set "minFiles=5"
for /f %%A in ('dir "%source%" /a-d-s-h /b ^| find /v /c ""') do if %%A leq %minFiles% goto :eof
:loop
for /f "delims=" %%a in ('dir /b /a-d /t:w /o:d "%source%"') do (
del "%%a"
goto :breakLoop
)
:breakLoop
for /f %%A in ('dir "%source%" /a-d-s-h /b ^| find /v /c ""') do if %%A gtr %minFiles% goto :loop
pause
您可以删除行for /f %%A in ('dir "%source%" /a-d-s-h /b ^| find /v /c ""') do if %%A gtr %minFiles% goto :loop