任何人都可以帮我创建一个批处理文件,该文件应该删除名称前面有关键字的文件。
例如:我有一个文件名ABC_%Date%.CSV
,每天创建两次。我想删除超过10天的这些文件。
请帮我创建一个批处理文件。
我是批处理脚本的新手,你也可以建议我学习任何有用的网站。
提前致谢, 蒂鲁
答案 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."
)