没有办法依赖文件复制或移动到文件夹中的日期。Windows设法在文件系统,驱动器,网络共享等中保留它。您可以使用linux文件服务器来解决问题,或者阻止人们使用FTP或基于Web的上传系统直接复制文件。
如果您认为人们上传后无法修改文件,可以设置单独的上传和访问文件夹,并使用脚本在文件之间移动并重新命名。但这听起来像您希望人们能够直接修改文件。
因此,一个简单的解决方案(如果有些棘手)将弄乱日期。我会写两个脚本:
每小时更改日期脚本
以您喜欢的语言每小时运行一次左右的脚本,该脚本是:
- 查找最近20年内修改日期的任何文件。
- 找到此类文件后,请将其修改日期更改为今天减去20年。
在powershell中,它看起来像这样:
$path = "D:\test"
$today = Get-Date
$before = $today.AddDays(-7300) #356*20 days
Get-ChildItem -Recurse -Path $path | foreach {
if ($_.LastWriteTime -gt $before) {
Write-Host $_.Name
$_.LastWriteTime = $before
}
}
今天(5月27日)运行此脚本,将所有文件的修改日期设置为1994年6月1日-恰好是356 * 20天前。因为它仅更改比$ before值新的文件,所以它不会触摸已设置为过去的文件。
清理脚本
清理脚本将每天晚上运行,并且:
我不会为这部分编写脚本-有很多实用程序可以处理删除指定日期之前的文件,请选择任意一个。重要的部分是查找7300 + X天前的文件,其中X是自上次修改以来您要保留的天数。
优点
与此处的其他答案相比,它具有一些优点:
- 如果有人修改文件,计时器将重置。
- 无需NTFS替代流来标记文件(在移动文件时保留这些流,因此可能会导致过早删除已修改的文件)
- 如果有任何性能影响,则应具有最小限度。无需保留数据库或文件名和/或哈希列表。
- 如果脚本无法运行,一切都不会令人震惊。不需要服务或不断运行的程序来更新日期。只是几个预定的任务。如果服务失败或进入竞争状态,则依赖监视新文件并立即将其最近修改时间更新为现在的解决方案可能最终会删除新文件。
我能看到的唯一问题是人们是否将20年前最后修改的文件复制到放置文件夹。我认为在大多数情况下,这不太可能成为一个大问题,但它可能会出现。