ค้นหาเว็บไซต์

วิธีลบไฟล์ที่เก่ากว่า X วันใน PowerShell


หากคุณต้องการดูแลรักษาและจัดระเบียบไฟล์ คุณควรลบไฟล์ที่ไม่จำเป็นอีกต่อไปเป็นประจำ โดยเฉพาะไฟล์ที่เก่ากว่าจำนวนวันที่กำหนด ในบทช่วยสอนนี้ ฉันจะแสดงวิธีลบไฟล์ที่เก่ากว่า X วันใน PowerShell

หากต้องการลบไฟล์ที่เก่ากว่าจำนวนวันที่ระบุใน PowerShell ให้ใช้ Get-ChildItem cmdlet เพื่อดึงไฟล์จากไดเร็กทอรี กรองไฟล์ตามเวลาเขียนล่าสุดด้วย Where-Object cmdlet จากนั้นลบออกด้วย Remove- รายการ. ตัวอย่างเช่น หากต้องการลบไฟล์ที่เก่ากว่า 30 วัน คุณสามารถใช้คำสั่งนี้: Get-ChildItem -Path “C:\MyFolder” | โดยที่วัตถุ {$_.LastWriteTime -lt (รับ-วันที่).AddDays(-30)} | ลบรายการ

ลบไฟล์ที่เก่ากว่า X วันใน PowerShell

PowerShell ให้ Get-ChildItem cmdlet เพื่อลบไฟล์ที่เก่ากว่าจำนวนวันที่กำหนด

เมื่อใช้คำสั่งนี้ ขั้นแรกจะดึงไฟล์จากไดเร็กทอรีที่ระบุ จากนั้นจึงส่งเอาต์พุตไปที่ Where-Object cmdlet เพื่อกรองไฟล์ตามอายุ สุดท้าย Remove-Item cmdlet จะใช้ในการลบไฟล์

นี่คือตัวอย่างพื้นฐานของสคริปต์ที่จะลบไฟล์ที่เก่ากว่า 30 วันออกจากโฟลเดอร์เฉพาะ:

$Path = "C:\MyFolder"
$Days = 30
Get-ChildItem -Path $Path | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$Days) } | Remove-Item

ในสคริปต์นี้ $Path ระบุไดเร็กทอรีเพื่อค้นหาไฟล์ และ $Days กำหนดจำนวนวันที่ใช้ในการกรองไฟล์ตามเวลาการเขียนครั้งล่าสุด ไฟล์ที่เก่ากว่า 30 วันนับจากวันที่ปัจจุบันจะถูกลบออก

ในภาพหน้าจอด้านล่าง ฉันรันสคริปต์ ซึ่งจะลบไฟล์ทั้งหมดที่เก่ากว่า 30 วันออกจากไดเร็กทอรี

ลบประเภทไฟล์เฉพาะที่เก่ากว่า 30 วันใน PowerShell

คุณยังสามารถแก้ไขสคริปต์ PowerShell เพื่อลบไฟล์บางประเภทหรือยกเว้นบางไดเร็กทอรีที่เก่ากว่า 30 วันได้ ตัวอย่างเช่น หากต้องการลบเฉพาะไฟล์ .log ที่เก่ากว่า 30 วัน คุณสามารถใช้สคริปต์ต่อไปนี้:

$Path = "C:\Logs"
$Days = 30
Get-ChildItem -Path $Path -Filter *.log | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$Days) } | Remove-Item

สคริปต์ PowerShell นี้จะค้นหาไฟล์ .log โดยเฉพาะ และยกเว้นไฟล์ประเภทอื่นๆ ทั้งหมด

การจัดการข้อผิดพลาดและการบันทึก

เป็นการดีเสมอที่จะจัดการกับข้อผิดพลาดขณะเขียนสคริปต์ PowerShell คุณสามารถเพิ่มพารามิเตอร์ -ErrorAction และ -ErrorVariable เพื่อบันทึกข้อผิดพลาดใดๆ ที่เกิดขึ้น นอกจากนี้ คุณยังสามารถส่งออกการดำเนินการไปยังไฟล์บันทึกได้โดยใช้ Out-File หรือ Add-Content cmdlets ต่อไปนี้คือวิธีที่คุณสามารถแก้ไขสคริปต์ PowerShell เพื่อรวมการจัดการข้อผิดพลาดและการบันทึก:

$Path = "C:\MyFolder"
$Days = 30
$LogPath = "C:\Logs\log.txt"
$ErrorActionPreference = "Continue"

Get-ChildItem -Path $Path -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$Days) } | ForEach-Object {
    try {
        $_ | Remove-Item -ErrorAction Stop
        "$($_.FullName) was deleted successfully" | Out-File -FilePath $LogPath -Append
    } catch {
        "An error occurred: $_" | Out-File -FilePath $LogPath -Append
    }
}

ในสคริปต์ PowerShell ข้างต้น $LogPath ระบุเส้นทางไปยังไฟล์บันทึกที่จะบันทึกการดำเนินการ บล็อก try จะพยายามลบไฟล์และบันทึกข้อความแสดงความสำเร็จ ในขณะที่บล็อก catch จะบันทึกข้อผิดพลาดและบันทึกข้อผิดพลาดเหล่านั้น

บทสรุป

การใช้ PowerShell เพื่อลบไฟล์ที่เก่ากว่าจำนวนวันที่กำหนดนั้นง่ายและสะดวกที่สุด

ในบทช่วยสอน PowerShell นี้ ฉันได้อธิบายวิธีลบไฟล์ที่เก่ากว่า X วันใน PowerShell โดยใช้ Get-ChildItem และ Remove-Item cmdlets

บทความที่เกี่ยวข้อง