setlocal EnableDelayedExpansion
pushd C:\backups
set top=7
set filespec=*.bak
set counter=0
for /f "delims=" %%f in ('dir /b %filespec%') do (
set /a counter+=1
if !counter! GTR %top% del /q "%%f"
)
我有. bak
文件,如果备份文件的数量超过7 i.e.8然后删除最旧的一个。
例如
1. bak1.bak 10:01 am
2. bak2.bak 10:02 am
3. bak3.bak 10:03 am
4. bak4.bak 10:04 am
5. bak5.bak 10:05 am
6. bak6.bak 10:06 am
7. bak7.bak 10:07 am
8. bak8.bak 10:08 am
现在,脚本将删除bak1。巴克是在10:01拍摄的,因此是最早的。
正在制作
1. bak2.bak 10:02 am
2. bak3.bak 10:03 am
3. bak4.bak 10:04 am
4. bak5.bak 10:05 am
5. bak6.bak 10:06 am
6. bak7.bak 10:07 am
7. bak8.bak 10:08 am
因此如果再次添加文件i.e.bak9.bak 10:09
则删除最旧的一个i。即bak2.bak
我写了剧本,但它并不是那样工作的。它所做的是,即使文件数量超过8e,它也只保留前7条记录。g.现在我有13个文件,如果我运行它,它将只保留前7个,其余6个将被删除,但这需要发生,只有当文件的数量得到8,因此删除最旧的一个,因此使他们再次7.
1条答案
按热度按时间ie3xauqp1#
现在,您没有按时间列出文件,而是按文件名的字母顺序列出它们。为了按时间列出文件,您需要使用
dir
的/o:-d
选项,以便将它们从最新到最旧排序。