Không có cách nào để dựa vào ngày mà một tập tin được sao chép hoặc di chuyển vào một thư mục. Windows quản lý để bảo vệ nó trên các hệ thống tệp, ổ đĩa, chia sẻ mạng, v.v. Bạn có thể làm việc gì đó với máy chủ tệp linux hoặc ngăn mọi người sao chép trực tiếp tệp bằng cách sử dụng FTP hoặc hệ thống tải lên dựa trên web.
Nếu bạn ổn với việc mọi người không thể sửa đổi các tệp sau khi họ tải lên, bạn có thể có các thư mục truy cập và tải lên riêng biệt và một tập lệnh di chuyển các tệp giữa chúng và hẹn hò lại với chúng. Nhưng có vẻ như bạn muốn mọi người có thể sửa đổi các tập tin trực tiếp.
Vì vậy, một giải pháp đơn giản, nếu hơi khó khăn, sẽ là lộn xộn với ngày. Tôi sẽ viết hai kịch bản:
Kịch bản thay đổi ngày hàng giờ
Có một tập lệnh chạy mỗi giờ một lần hoặc lâu hơn, bằng ngôn ngữ ưa thích của bạn, rằng:
- Tìm kiếm bất kỳ tập tin có ngày sửa đổi trong vòng 20 năm qua.
- Khi tìm thấy một tệp như vậy, hãy thay đổi ngày sửa đổi thành ngày hôm nay trừ đi 20 năm.
Trong powershell, nó sẽ trông giống như thế này:
$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
}
}
Chạy tập lệnh này ngày hôm nay (27 tháng 5), đặt ngày sửa đổi của tất cả các tệp thành ngày 1 tháng 6 năm 1994 - chính xác là 356 * 20 ngày trước. Vì nó chỉ thay đổi các tệp mới hơn giá trị $ trước, nên nó sẽ không chạm vào các tệp mà nó đã đặt về quá khứ.
Tập lệnh dọn dẹp
Kịch bản dọn dẹp sẽ chạy mỗi đêm và:
- Tìm kiếm các tệp có ngày sửa đổi "20 năm và X ngày trước"
- Xóa chúng
Tôi sẽ không viết kịch bản cho phần này - có rất nhiều tiện ích có thể xử lý xóa các tệp cũ hơn một ngày đã chỉ định, chọn bất kỳ tùy chọn nào bạn muốn. Phần quan trọng là tìm kiếm các tệp 7300 + X ngày tuổi, trong đó X là số ngày bạn muốn giữ chúng kể từ lần sửa đổi cuối cùng.
Ưu điểm
Điều này có một vài lợi thế so với các câu trả lời khác ở đây:
- Bộ hẹn giờ sẽ thiết lập lại nếu ai đó sửa đổi tập tin.
- Không cần các luồng thay thế NTFS để đánh dấu các tệp (được bảo toàn khi di chuyển tệp, do đó có thể gây ra việc xóa sớm tệp đã sửa đổi)
- Nên có tối thiểu nếu có tác động hiệu suất. Không cần phải giữ cơ sở dữ liệu hoặc danh sách tên tệp và / hoặc băm.
- Không có gì phá vỡ khủng khiếp nếu các kịch bản không chạy. Không có dịch vụ hoặc chương trình liên tục chạy cần thiết để cập nhật ngày. Chỉ cần một vài nhiệm vụ theo lịch trình. Các giải pháp dựa vào việc xem các tệp mới và cập nhật thời gian sửa đổi cuối cùng của chúng thành ngay bây giờ có thể sẽ xóa các tệp mới nếu dịch vụ không thành công hoặc chạy trong tình trạng chạy đua.
Vấn đề duy nhất tôi có thể thấy là nếu mọi người sao chép một tệp đã được sửa đổi lần cuối 20 năm trước vào thư mục thả. Tôi nghĩ trong hầu hết các kịch bản, điều đó dường như không phải là vấn đề, nhưng nó có thể xảy ra.