Lệnh Remove-Item trong PowerShell: Hướng Dẫn Chi Tiết và Ví Dụ

Lệnh Remove-Item là một cmdlet mạnh mẽ trong PowerShell, cho phép bạn xóa các mục khác nhau như tệp, thư mục, khóa registry, biến, alias và hàm. Nó được hỗ trợ bởi nhiều provider, giúp bạn quản lý hệ thống một cách linh hoạt.

Cú Pháp

Remove-Item [-Path] <string> [-Filter <string>] [-Include <string>] [-Exclude <string>] [-Recurse] [-Force] [-Credential <pscredential>] [-WhatIf] [-Confirm] [-Stream <string>] [<CommonParameters>]
Remove-Item -LiteralPath <string> [-Filter <string>] [-Include <string>] [-Exclude <string>] [-Recurse] [-Force] [-Credential <pscredential>] [-WhatIf] [-Confirm] [-Stream <string>] [<CommonParameters>]
Remove-Item [-Path] <string> [-Filter <string>] [-Include <string>] [-Exclude <string>] [-Recurse] [-Force] [-Credential <pscredential>] [-WhatIf] [-Confirm] [-DeleteKey] [<CommonParameters>]
Remove-Item -LiteralPath <string> [-Filter <string>] [-Include <string>] [-Exclude <string>] [-Recurse] [-Force] [-Credential <pscredential>] [-WhatIf] [-Confirm] [-DeleteKey] [<CommonParameters>]
Remove-Item [-Path] <string> [-Filter <string>] [-Include <string>] [-Exclude <string>] [-Recurse] [-Force] [-Credential <pscredential>] [-WhatIf] [-Confirm] [<CommonParameters>]
Remove-Item -LiteralPath <string> [-Filter <string>] [-Include <string>] [-Exclude <string>] [-Recurse] [-Force] [-Credential <pscredential>] [-WhatIf] [-Confirm] [<CommonParameters>]

Mô Tả Chi Tiết

Cmdlet Remove-Item xóa một hoặc nhiều mục. Do được hỗ trợ bởi nhiều provider, nó có thể xóa nhiều loại mục khác nhau, bao gồm tệp, thư mục, khóa registry, biến, alias và hàm.

Các Ví Dụ Sử Dụng Lệnh Remove-Item

Ví dụ 1: Xóa các tệp có bất kỳ phần mở rộng nào

Ví dụ này xóa tất cả các tệp có tên bao gồm dấu chấm (.) từ thư mục C:Test. Vì lệnh chỉ định dấu chấm, lệnh sẽ không xóa thư mục hoặc tệp không có phần mở rộng.

Remove-Item C:Test*.*

Ví dụ 2: Xóa các tệp tài liệu trong một thư mục

Ví dụ này xóa tất cả các tệp có phần mở rộng .doc và tên không bao gồm *1* khỏi thư mục hiện tại.

Remove-Item * -Include *.doc -Exclude *1*

Nó sử dụng ký tự đại diện (*) để chỉ định nội dung của thư mục hiện tại. Nó sử dụng các tham số IncludeExclude để chỉ định các tệp cần xóa.

Ví dụ 3: Xóa các tệp ẩn, chỉ đọc

Lệnh này xóa một tệp vừa ẩn vừa chỉ đọc.

Remove-Item -Path C:Testhidden-RO-file.txt -Force

Nó sử dụng tham số Path để chỉ định tệp. Nó sử dụng tham số Force để xóa nó. Nếu không có Force, bạn không thể xóa các tệp chỉ đọc hoặc ẩn.

Ví dụ 4: Xóa các tệp trong các thư mục con một cách đệ quy

Lệnh này xóa tất cả các tệp CSV trong thư mục hiện tại và tất cả các thư mục con một cách đệ quy.

Vì tham số Recurse trong Remove-Item có một vấn đề đã biết, lệnh trong ví dụ này sử dụng Get-ChildItem để lấy các tệp mong muốn, sau đó sử dụng toán tử pipeline để chuyển chúng đến Remove-Item.

Get-ChildItem * -Include *.csv -Recurse | Remove-Item

Trong lệnh Get-ChildItem, Path có giá trị là (*), đại diện cho nội dung của thư mục hiện tại. Nó sử dụng Include để chỉ định loại tệp CSV và nó sử dụng Recurse để thực hiện truy xuất đệ quy. Nếu bạn cố gắng chỉ định loại tệp trong đường dẫn, chẳng hạn như -Path *.csv, cmdlet sẽ diễn giải chủ đề của tìm kiếm là một tệp không có mục con và Recurse sẽ không thành công.

Lưu ý: Hành vi này đã được sửa trong Windows phiên bản 1909 trở lên.

Ví dụ 5: Xóa các khóa con một cách đệ quy

Lệnh này xóa khóa registry “OldApp” và tất cả các khóa con và giá trị của nó. Nó sử dụng Remove-Item để xóa khóa. Đường dẫn được chỉ định, nhưng tên tham số tùy chọn (Path) bị bỏ qua.

Tham số Recurse xóa tất cả nội dung của khóa “OldApp” một cách đệ quy. Nếu khóa chứa các khóa con và bạn bỏ qua tham số Recurse, bạn sẽ được nhắc xác nhận rằng bạn muốn xóa nội dung của khóa.

Remove-Item HKLM:SoftwareMyCompanyOldApp -Recurse

Ví dụ 6: Xóa các tệp có ký tự đặc biệt

Ví dụ sau đây cho thấy cách xóa các tệp có chứa các ký tự đặc biệt như dấu ngoặc vuông hoặc dấu ngoặc đơn.

Get-ChildItem Directory: C:tempDownloads Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 6/1/2018 12:19 PM 1362 myFile.txt -a--- 6/1/2018 12:30 PM 1132 myFile[1].txt -a--- 6/1/2018 12:19 PM 1283 myFile[2].txt -a--- 6/1/2018 12:19 PM 1432 myFile[3].txt Get-ChildItem | Where-Object Name -Like '*`[*' Directory: C:tempDownloads Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 6/1/2018 12:30 PM 1132 myFile[1].txt -a--- 6/1/2018 12:19 PM 1283 myFile[2].txt -a--- 6/1/2018 12:19 PM 1432 myFile[3].txt Get-ChildItem | Where-Object Name -Like '*`[*' | ForEach-Object { Remove-Item -LiteralPath $_.Name } Get-ChildItem Directory: C:tempDownloads Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 6/1/2018 12:19 PM 1362 myFile.txt

Ví dụ 7: Xóa một luồng dữ liệu thay thế

Ví dụ này cho thấy cách sử dụng tham số động Stream của cmdlet Remove-Item để xóa một luồng dữ liệu thay thế. Tham số stream được giới thiệu trong Windows PowerShell 3.0.

Get-Item C:TestCopy-Script.ps1 -Stream Zone.Identifier FileName: \C:TestCopy-Script.ps1 Stream Length ------ ------ Zone.Identifier 26 Remove-Item C:TestCopy-Script.ps1 -Stream Zone.Identifier Get-Item C:TestCopy-Script.ps1 -Stream Zone.Identifier Get-Item : Could not open alternate data stream 'Zone.Identifier' of file 'C:TestCopy-Script.ps1'.

Tham số Stream của Get-Item lấy luồng Zone.Identifier của tệp Copy-Script.ps1. Remove-Item sử dụng tham số Stream để xóa luồng Zone.Identifier của tệp. Cuối cùng, cmdlet Get-Item cho thấy rằng luồng Zone.Identifier đã bị xóa.

Các Tham Số Của Lệnh Remove-Item

  • -Confirm: Hiển thị lời nhắc xác nhận trước khi chạy cmdlet.
  • -Credential: Chỉ định tài khoản người dùng có quyền thực hiện hành động này.
  • -DeleteKey: (Chỉ dành cho Certificate Provider) Xóa khóa riêng tư khi chứng chỉ bị xóa.
  • -Exclude: Chỉ định một mảng chuỗi các mục mà cmdlet này loại trừ trong thao tác.
  • -Filter: Chỉ định một bộ lọc để đủ điều kiện tham số Path.
  • -Force: Buộc cmdlet xóa các mục không thể thay đổi được, chẳng hạn như tệp ẩn hoặc chỉ đọc.
  • -Include: Chỉ định một mảng chuỗi các mục mà cmdlet này bao gồm trong thao tác.
  • -LiteralPath: Chỉ định một đường dẫn đến một hoặc nhiều vị trí. Sử dụng chính xác như được nhập, không có ký tự nào được hiểu là ký tự đại diện.
  • -Path: Chỉ định đường dẫn của các mục sẽ bị xóa. Cho phép sử dụng ký tự đại diện.
  • -Recurse: Chỉ định rằng cmdlet này xóa các mục ở các vị trí được chỉ định và trong tất cả các mục con của các vị trí.
  • -Stream: (Chỉ dành cho FileSystem Provider) Chỉ định một luồng dữ liệu thay thế.
  • -WhatIf: Hiển thị những gì sẽ xảy ra nếu cmdlet chạy. Cmdlet không được chạy.

Đầu Vào và Đầu Ra

  • Đầu vào: String (Bạn có thể chuyển một chuỗi chứa đường dẫn, nhưng không phải đường dẫn ký tự, đến cmdlet này.)
  • Đầu ra: None (Cmdlet này không trả về đầu ra.)

Lưu Ý

  • PowerShell bao gồm các alias sau cho Remove-Item:
    • del
    • erase
    • rd
    • ri
    • rm (chỉ trên Windows)
    • rmdir (chỉ trên Windows)
  • Cmdlet Remove-Item được thiết kế để hoạt động với dữ liệu được cung cấp bởi bất kỳ provider nào.
  • Khi bạn cố gắng xóa một thư mục chứa các mục mà không sử dụng tham số Recurse, cmdlet sẽ nhắc bạn xác nhận. Sử dụng -Confirm:$false không chặn lời nhắc. Điều này là do thiết kế.

Các Liên Kết Liên Quan

  • about_Providers
  • about_Wildcards
  • Get-ChildItem
  • Invoke-Command
  • about_Certificate_Provider
  • about_FileSystem_Provider
  • about_Quoting_Rules
  • Unblock-File

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *