powershell - PowerShell का उपयोग कर 15 दिनों से अधिक पुरानी फ़ाइलों को हटाएं




5 Answers

दिए गए उत्तरों केवल फाइलों को हटा देंगे (जो स्वीकार्य रूप से इस पोस्ट के शीर्षक में है), लेकिन यहां कुछ कोड है जो पहले 15 दिनों से पुरानी सभी फ़ाइलों को हटा देगा, और उसके बाद छोड़े गए किसी खाली निर्देशिका को दोबारा हटा दें पीछे। मेरा कोड छुपा और केवल-पढ़ने वाली फ़ाइलों को हटाने के लिए -Force विकल्प का भी उपयोग करता है। इसके अलावा, मैंने उपनामों का उपयोग नहीं करना चुना क्योंकि ओपी gci में नया है और यह समझ में नहीं आता कि gci क्या है ? , % , आदि हैं।

$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"

# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

और निश्चित रूप से यदि आप देखना चाहते हैं कि वास्तव में उन्हें हटाने से पहले कौन सी फाइलें / फ़ोल्डर्स हटा दिए जाएंगे, तो आप केवल दोनों पंक्तियों के अंत में Remove-Item cmdlet कॉल पर -WhatIf स्विच जोड़ सकते हैं।

यहां दिखाया गया कोड PowerShell v2.0 संगत है, लेकिन मैं इस कोड और तेज़ PowerShell v3.0 कोड को भी अपने ब्लॉग पर आसान पुन: प्रयोज्य कार्यों के रूप में दिखाता हूं

मैं केवल उन फ़ाइलों को हटाना चाहता हूं जो 15 दिनों पहले किसी विशेष फ़ोल्डर में बनाए गए थे। मैं PowerShell का उपयोग करके यह कैसे कर सकता हूं?




एक और तरीका वर्तमान तारीख से 15 दिन घटाना और उस मूल्य के विरुद्ध CreationTime तुलना करना है:

$root  = 'C:\root\folder'
$limit = (Get-Date).AddDays(-15)

Get-ChildItem $root -Recurse | ? {
  -not $_.PSIsContainer -and $_.CreationTime -lt $limit
} | Remove-Item



इसे इस्तेमाल करे:

dir C:\PURGE -recurse | 
where { ((get-date)-$_.creationTime).days -gt 15 } | 
remove-item -force



एक और विकल्प (15. स्वचालित रूप से [timespan] पर टाइप किया जाता है):

ls -file | where { (get-date) - $_.creationtime -gt 15. } | Remove-Item -Verbose



#----- Define parameters -----#
#----- Get current date ----#
$Now = Get-Date
$Days = "15" #----- define amount of days ----#
$Targetfolder = "C:\Logs" #----- define folder where files are located ----#
$Extension = "*.log" #----- define extension ----#
$Lastwrite = $Now.AddDays(-$Days)

#----- Get files based on lastwrite filter and specified folder ---#
$Files = Get-Children $Targetfolder -include $Extension -Recurse | where {$_.LastwriteTime -le "$Lastwrite"}

foreach ($File in $Files)
{
    if ($File -ne $Null)
    {
        write-host "Deleting File $File" backgroundcolor "DarkRed"
        Remove-item $File.Fullname | out-null
    }
    else
        write-host "No more files to delete" -forgroundcolor "Green"
    }
}



Related