windows 为什么我的.bat脚本在文件夹中的总计数达到8时不删除文件?

u0sqgete  于 2023-05-01  发布在  Windows
关注(0)|答案(1)|浏览(154)
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.

ie3xauqp

ie3xauqp1#

现在,您没有按时间列出文件,而是按文件名的字母顺序列出它们。为了按时间列出文件,您需要使用dir/o:-d选项,以便将它们从最新到最旧排序。

@echo off
setlocal EnableDelayedExpansion

pushd "C:\backups"
set "top=7"
set "filespec=*.bak"
set "counter=0"

for /f "delims=" %%f in ('dir /b /o:-d %filespec%') do (
    set /a counter+=1
    if !counter! GTR %top% del /q "%%~f"
)

相关问题