Tôi đang cố viết một tập lệnh sẽ xem qua một tập hợp các thư mục và chỉ giữ lại 10 tệp cuối cùng. Các tệp trong mỗi thư mục có thể được tạo hàng ngày, hàng tuần hoặc hàng tháng. Tôi cần tập lệnh để giữ 10 bản sao gần đây nhất bất kể ngày tạo hoặc ngày sửa đổi.Giữ x số lượng tệp và xóa tất cả các tệp khác - Powershell
Sử dụng một bài đăng khác mà tôi đã tạo tập lệnh bên dưới hoạt động nhưng không giữ được 10 bản sao nó giữ bất kỳ tệp nào không quá 10 ngày.
$ftppath = "C:\Reports"
Get-ChildItem $ftppath -recurse *_Report_*.zip -force|where {$_.lastwritetime -lt (get-date).adddays(-10)} |Remove-Item -force
Bất kỳ ý tưởng nào về cách tôi có thể tinh chỉnh tính năng này để hoạt động? Nếu tôi sử dụng kịch bản dưới đây nó hoạt động nhưng chỉ khi tôi không thiết lập -Recurse. Nếu bạn sử dụng chuyển đổi -Recurse bạn nhận được một lỗi mà tôi đã liệt kê bên dưới kịch bản.
# Keeps latest 10 files from a directory based on Creation Time
#Declaration variables
$path = "C:\Reports" # For example $path= C:\log\*.tmp
$total= (ls $path).count - 10 # Change number 5 to whatever number of objects you want to keep
# Script
ls $path |sort-object -Property {$_.CreationTime} | Select-Object -first $total | Remove-Item -force
Error: Select-Object : Cannot validate argument on parameter 'First'. The -7 argument is less than the minimum allowed range of 0. Supply an argument that is greater than 0 and then try the command again.
Ah '-Skip'. Tốt đẹp và súc tích :-) +1 –
Đã thử nghiệm này và có một số kết quả kỳ lạ, không chắc chắn những gì đang xảy ra ở đó ... Tái kiểm tra và nó làm việc như tôi mong đợi. Nice 1 lót. –
@Andy - vâng, tôi đã thử mã của bạn để tạo tệp và lần thứ hai tôi chạy tệp đó, CreationTime không được cập nhật cho tất cả các tệp. Tôi không biết chính xác lý do tại sao mặc dù: -/ – Rynant