我有一个问题,我想解决基本上我想要删除存在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
)
答案 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"
。