创建自我过期的文件

时间:2012-08-30 10:24:20

标签: c# windows vb.net

我经常使用各种shell脚本创建日志/报告文件。这很好,但大部分时间我只需要简单地查看内容 - 通常是在同一天或一周之后。

我想要做的是能够将文件标记为过期,因此在给定的一段时间后,文件将被删除或移动到存档目录。

由于我可以控制文件创建,我当然可以给它一定的扩展名,例如.SEF并写一个服务来定期解析我硬盘上的目录,但这看起来有点笨拙。

我还查看了自定义文件属性:

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/173ab6de-3cd8-448f-8c42-de9d2240b913

但是我需要写一些东西来将文件属性添加到文件中。所以在Powershell / SFU或类似的地方:

cat JobOutput.txt | grep -e Error | expire > report.txt

或普通的旧窗户:

type JobOutput.txt | findstr Error | expire > report.txt

有没有人像这样远程做过什么?

修改

我上面所描述的仅仅是我想做的事情的一个方面。例如,您可能希望发送一封需要在时间限制内响应的电子邮件,然后在此之后删除。

另一个示例可能是您发布的文档,其中包含您在一段时间后不想使用的临时系统解决方法的详细信息。

我们当然要进入各种应用程序的变幻莫测,但自定义文件属性的想法看起来很有前途和吸引力。问题当然是它们如何应用于每种文件类型......

现在,我很乐意根据我最初提出的问题来解决这个问题,在这种情况下,我可以定义一个自定义扩展程序,它会被预定的作业清除。

解决方案:

好的,我决定采用Powershell解决方案(略微调整),因为我非常熟悉它:

$HowManyDays = 15  
$LastWrite = (Get-Date).AddDays(-$HowManyDays)  
Get-ChildItem -recurse -include *.sef |     
Where {$_.LastWriteTime -le "$LastWrite"} |     
Remove-Item 

非常感谢你对此的帮助。

4 个答案:

答案 0 :(得分:1)

如果您对Alex K.提供的内容相当满意,那么调整应该很容易。

创建一个cmd文件,当你调用它时,传入文件搜索模式,如果那样*.*那么就是这样。

在cmd文件中调用:

robocopy "c:\from" "c:\to" /s %1 /MINAGE:7 /MOV 

请参阅:How do I pass command line parameters to a batch file?

答案 1 :(得分:0)

我们在通过任务计划程序安排的Powershell中使用一个小脚本来删除超过15天的日志。

您可以删除文件或移动它们。这是脚本:


$HowManyDays = 15

$LastWrite = (Get-Date).AddDays(-$HowManyDays)

Get-ChildItem *.log |
    Where {$_.LastWriteTime -le "$LastWrite"} |
    Remove-Item

答案 2 :(得分:0)

我也会去预定的调用。

如果您不想调用Powershell或下载robocopy,您可以坚持使用命令行单行:

forfiles /p "C:\Path" /m *.log /d -7 /c "cmd /c del @file"

我将其调整并烘焙成批处理,我可以安排清理任何文件夹+子文件夹。仅供参考,这将为您提供以下内容:

forfiles /p "C:\Path" /m *.* /d -7 /c "cmd /c if [@isdir]==[TRUE] rmdir @file /s /q"

答案 3 :(得分:0)

您有两个问题: 1.如何指出哪些文件应该“到期”。 2.如何(快速)找到过期的文件。

对于1,您需要确定文件扩展名是否是可接受的方法,或者您是否需要使用某些自定义文件属性,以及它是存储在NTFS文件系统中还是嵌入在文件内容中。

对于2,您可以使用例如locate32创建索引,但这只允许您根据扩展名快速查找文件;自定义属性已经输出 - 除非您想要获取locate32的源并添加索引自定义属性的功能。它可能非常有用(例如,带有自定义属性的Word文档或DLL中的版本)。 另一种索引方法是在“待过期”目录中创建符合过期文件的符号链接。

实际删除很简单,您可以使用此处发布的任何解决方案;使用索引可以更快地找到过期的文件。