file - 将 7 个最新文件保存在文件夹中的批处理文件

标签 file batch-file delete-file

谁能帮我创建一个批处理文件?基本上,我的目标是创建一个批处理文件,将最新的 7 个 .txt 文件(换句话说,最新的)保存在文件夹中,然后删除其余文件。那是如果文件夹中有超过 7 个文件。

我现在遇到的问题是,我创建的批处理文件删除了大部分文件,因为它们的日期是一两个月左右。我想始终保留最新的 7 个文件,无论它们有多旧。

所以这就是我所拥有的 -

@echo off

setlocal enableextensions

rem ********************************************************************************
rem *******************************  LOCAL VARIABLES  ******************************
rem ********************************************************************************

SET TargetDirectory="C:\TEMP\test"

SET No_of_fles_to_keep=7

SET count=0 

set cnt=0

rem ********************************************************************************

cd /d %TargetDirectory%

REM timeout /T 500

 for %%x in (*) do set /a count+=1

 for %%A in (*.bat) do set /a cnt+=1

cd /d %TargetDirectory%

REM timeout /T 500

IF %count% gtr %No_of_fles_to_keep% forfiles -p %TargetDirectory% -s -m "*.txt" -d -%No_of_fles_to_keep% -c "cmd /c del @path"

echo %count% 

echo File count = %cnt% 

任何帮助表示赞赏。

最佳答案

您可以将 DIR 与 /O-D 一起使用按时间戳降序列出文本文件。 FOR/F 允许您遍历每个文件。 SET/A 用于跟踪到目前为止列出了多少文件。现在是棘手的部分。

在代码块中,您通常需要使用延迟扩展来处理之前在同一 block 中设置的变量的值。但是如果 FOR 变量值包含 !,延迟扩展可能会导致 FOR 循环出现问题。 , 和 !在文件名中有效。我通过在读取第 7 个文件名时使用 SET/A 故意除以 0 来解决此问题。这会引发一个错误,导致执行未定义 KEEP 变量的条件代码。从那时起,所有剩余的文件都将被删除。

@echo off
setlocal
set /a cnt=0
set "keep=7"
for /f "eol=: delims=" %%F in ('dir /b /o-d /a-d *.txt') do (
  if defined keep (
    2>nul set /a "cnt+=1, 1/(keep-cnt)" || set "keep="
  ) else del "%%F"
)

更新

哦,天哪,我刚刚意识到有一个简单的解决方案。只需使用 FOR/F SKIP 选项在按最后修改日期降序排序后忽略前 7 个条目。
for /f "skip=7 eol=: delims=" %%F in ('dir /b /o-d /a-d *.txt') do @del "%%F"

您甚至不需要批处理文件。只需更改 %%%如果从命令提示符运行。

关于file - 将 7 个最新文件保存在文件夹中的批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13367746/

相关文章:

date - 删除日期后的所有文件,代码很慢

HTML 文件上传字段样式

java最快的SSD并发随机文件读/写方法,无需内存交换

python - open().read() 安全吗?

windows - 发生错误时跳过

linux - 删除目录中的文件并打印删除的文件名

c# - 如何获得删除文件/文件夹的管理员权限?

c - 尝试根据排序的学生 ID 显示文件中的学生数据

javascript - 通过 JavaScript 发送 Outlook 邮件

batch-file - 如何将变量的值写入 dos 文本文件?