如果文件修改日期早于N天[批处理脚本]如何获取

时间:2017-09-15 08:38:53

标签: batch-file cmd

我有一个问题,我想解决基本上我想要删除存在2天或超过2天的文件,我想知道它是否存在被删除因为我需要在日志中记录。如果文件已被删除,则为txt

这是没有Log.txt的当前代码

forfiles /p "E:\Backup\DailyWinflexBackup" /s /d -2 /c "cmd /c del @file : date >= 2 days >NUL"

我想做这样的陈述

IF (FILE WITH MORE THAN 2 days exist) (

::PROCESS DELETE
ECHO (MESSAGE)>>Log.txt
) ELSE (
ECHO (MESSAGE)>>Log.txt
)

1 个答案:

答案 0 :(得分:1)

好吧,我假设您希望在删除文件时输出不同的日志消息。为此,您可以使用两个嵌套的forfiles循环,如下例所示:

> nul forfiles /S /P "E:\Backup\DailyWinflexBackup" /M "*" /C "cmd /C if @isdir==FALSE 2> nul forfiles /M @file /D -155 /C 0x22cmd /C del @path && > con echo 00x7840file deleted0x22 || > con echo @file NOT deleted"

外部forfiles循环枚举所有匹配的文件,而不是关于其年龄(或上次修改日期)。查询if @isdir==FALSE确保只处理文件,因为forfiles也枚举目录。内部forfiles循环在外循环的每次迭代中匹配一个项目,并按年龄过滤它(由于/D -2);如果最后修改了2天或更早,则del删除该文件,并由echo输出相关的日志消息;如果文件较年轻,forfiles失败(2> nul部分禁止其错误消息),因此||后面的echo命令将被执行。最开始的> nul部分会抑制forfiles返回的空行。因此,显式重定向到控制台,echo输出也需要> con才能被抑制。要将日志消息写入日志文件,请将> con替换为> "\path\to\log\file.txt"