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

时间:2018-01-01 13:30:44

标签: windows batch-file

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

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

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

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

提前致谢, 蒂鲁

2 个答案:

答案 0 :(得分:1)

阅读Bat file to delete files only when younger files are present以了解下面批处理文件中使用的策略,删除当前目录中除最新修改(或创建)的最新文件之外的所有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 命令行上的插入符^进行转义,以便在执行命令之前Windows命令解释程序处理此命令行时将其解释为文字字符FOR ,它在后台启动的单独命令进程中执行嵌入式dir命令行。

答案 1 :(得分: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."
)