创建一个批处理文件,该文件应删除名称前面有关键字的文件[关闭]

问题描述 投票:0回答:2

任何人都可以帮我创建批处理文件,该文件应该删除名称前面有关键字的文件。

例如:我有一个文件名ABC_%Date%.CSV,它每天创建两次。我想删除超过10天的这些文件。

请帮我创建一个批处理文件。

我是批处理脚本的新手,你也可以建议我学习任何有用的网站。

提前谢谢,蒂鲁

windows batch-file
2个回答
1
投票

阅读Bat file to delete files only when younger files are present以了解下面批处理文件中使用的策略,删除当前目录中除最新的20个修改(或创建)文件之外的所有ABC_*.CSV文件。

@for /F "skip=20 delims=" %%I in ('dir "ABC_*.CSV" /A-D /B /O-D /TW 2^>nul') do @del "%%I"

因此,这个简单的一行批处理文件将20个最新的ABC_*.CSV文件保存在当前目录中,并删除与此模式匹配的所有其他(较旧的)文件。每天创建两次时,每个%Date%的文件名必须超过ABC_*.CSV。或者已经存在已经存在的ABC_%Date%.CSV文件已被覆盖,因此10个不同日期只有10个文件?

FOR选项skip=之后的值确定应保留多少最新文件。在每天创建两个ABC_*.csv文件并保留最新的20个文件时,此单行批处理文件将删除所有超过10天的文件。好吧,正如参考答案中所写,文件的年龄并不重要,只是它们的文件大小和剩余的可用磁盘空间。此解决方案确保至少最新的20个ABC_*.csv文件存储在存储介质上,与创建它们的频率无关,并且每天创建的文件是否真的成功。

要在目录中使用文件的创建日期,请使用:

@for /F "skip=20 delims=" %%I in ('dir "ABC_*.CSV" /A-D /B /O-D /TC 2^>nul') do @del "%%I"

与上面的命令行相比,/TW(写入时间)在这里被/TC(创建时间)替换。

请注意,创建日期不会存储第一次创建文件本身的时间。它存储第一次在此目录中创建此文件时的时间戳。因此,例如,文件夹的最后修改日期2017-12-30 18:24:30从文件夹X复制到另一个文件夹Y今天在文件夹Y中的文件创建日期为2018-01-01 20:59:38,而最后一次修改日期未经修改2017-12-30 18:24:30并且文件夹X中相同文件的文件创建日期例如也是2017-12-30 18:24:30。换句话说,文件夹Y中的文件是在上次修改其内容之后创建的。

要了解使用的命令及其工作方式,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • del /?
  • dir /?
  • for /?

另请阅读有关Using Command Redirection Operators的Microsoft文章,了解2>nul的解释。重定向运算符>必须在FOR命令行上使用插入符号^进行转义,以便在执行命令FOR之前在Windows命令解释程序处理此命令行时将其解释为文字字符,该命令在后台启动的单独命令进程中执行嵌入式dir命令行。


1
投票

使用以下代码(小心,因为没有回头)。

在第一行定义正确的路径,并根据您的意愿在第1行和第2行替换Date。好运。

if exist "C:\Users\-\myfolder\ABC_*Date*.CSV" (
   del ABC_*Date*.CSV
   echo "Files found and deleted."
) else (
   echo "Nothing done."
)
© www.soinside.com 2019 - 2024. All rights reserved.