Hướng dẫn chi tiết cách sao chép file bằng PowerShell cho người mới bắt đầu đến chuyên gia

cách sao chép file bằng powershell

PowerShell là một công cụ dòng lệnh mạnh mẽ trên Windows, cho phép tự động hóa hầu hết các tác vụ quản trị hệ thống, trong đó có thao tác sao chép file và thư mục. Nắm vững cách sao chép file bằng PowerShell không chỉ giúp bạn làm việc nhanh hơn so với giao diện đồ họa, mà còn mở ra khả năng xử lý hàng loạt dữ liệu phức tạp mà File Explorer không làm được. Bài viết này sẽ đi từ cơ bản đến nâng cao, trang bị cho bạn mọi kiến thức cần thiết để sử dụng lệnh Copy-Item và các kỹ thuật liên quan.

PowerShell và lệnh Copy-Item – Công cụ sao chép file chủ lực

cách sao chép file bằng powershell - Hình 5

Bản chất của việc sao chép file trong PowerShell được thực hiện thông qua cmdlet Copy-Item. Đây là lệnh duy nhất và đầy đủ nhất để thực hiện mọi thao tác sao chép, từ file đơn lẻ, nhiều file, cho đến toàn bộ cây thư mục. Copy-Item có thể được viết tắt thành các alias như copy, cp hoặc cpi để tiết kiệm thời gian gõ lệnh.

Cú pháp cơ bản của lệnh: Copy-Item -Path "Nguồn" -Destination "Đích". Trong đó, Path chỉ định file hoặc thư mục nguồn cần sao chép, Destination chỉ định vị trí đích. Nếu Destination là một thư mục đã tồn tại, file nguồn sẽ được sao chép vào bên trong thư mục đó. Nếu Destination là một đường dẫn file mới, PowerShell sẽ tạo file mới tại vị trí đó với nội dung từ nguồn.

Xem thêm:  Cách quản lý startup apps hiệu quả: Chiến lược vận hành từ A-Z cho nhà sáng lập

Các tham số quan trọng trong Copy-Item

Để sao chép file một cách linh hoạt, bạn cần hiểu rõ các tham số đi kèm. Bắt buộc khi sao chép thư mục. Copy-Item -Path “C:FolderA” -Destination “D:FolderB” -Recurse -Force Ghi đè file đích nếu đã tồn tại, hoặc tạo thư mục đích nếu chưa có. Copy-Item -Path “C:data.xlsx” -Dest “D:data.xlsx” -Force -Filter Chỉ sao chép các file thỏa mãn điều kiện (hỗ trợ ký tự đại diện). Copy-Item -Path “C:Reports” -Dest “D:Backup” -Filter “.pdf” -Include / -Exclude Bao gồm hoặc loại trừ các file dựa trên mẫu tên. Copy-Item -Path “C:Logs” -Dest “D:Archive” -Include “.log”, “.txt” -Container Giữ nguyên cấu trúc thư mục khi sao chép. Mặc định là $true. Copy-Item -Path “C:Source” -Dest “D:Dest” -Recurse -Container:$false -PassThru Trả về đối tượng file/thư mục đã được sao chép, hữu ích cho xử lý tiếp theo. Copy-Item -Path “C:file.txt” -Dest “D:file.txt” -PassThru

Hướng dẫn cách sao chép file bằng PowerShell từ cơ bản đến nâng cao

cách sao chép file bằng powershell - Hình 4

Sao chép một file đơn lẻ

Đây là thao tác đơn giản nhất. Bạn chỉ cần chỉ định đường dẫn file nguồn và đường dẫn đích. Nếu file đích đã tồn tại, lệnh sẽ báo lỗi trừ khi bạn dùng tham số -Force.

Ví dụ: Copy-Item -Path "C:UsersPublicDocumentsreport.docx" -Destination "D:Backupreport.docx"

Lưu ý rằng nếu bạn chỉ định Destination là một thư mục (ví dụ “D:Backup”), PowerShell sẽ tự động giữ nguyên tên file nguồn và đặt nó vào thư mục đó. Điều này giúp tránh nhầm lẫn khi sao chép nhiều file.

Sao chép nhiều file cùng lúc

PowerShell cho phép sao chép nhiều file bằng cách sử dụng ký tự đại diện (wildcard) trong tham số Path. Dấu đại diện cho bất kỳ chuỗi ký tự nào, dấu? đại diện cho một ký tự đơn.

    • Sao chép tất cả file trong thư mục: Copy-Item -Path "C:Data" -Destination "D:Backup"
    • Sao chép file có đuôi.txt: Copy-Item -Path "C:Data.txt" -Destination "D:Backup"
    • Sao chép file có tên bắt đầu bằng “log” và kết thúc bằng.csv: Copy-Item -Path "C:Datalog*.csv" -Destination "D:Backup"

Khi sử dụng ký tự đại diện, hãy nhớ rằng lệnh chỉ sao chép các file ở cấp thư mục hiện tại, không bao gồm thư mục con. Để bao gồm thư mục con, bạn cần thêm tham số -Recurse.

Sao chép toàn bộ thư mục (bao gồm cấu trúc con)

Để sao chép một thư mục và tất cả nội dung bên trong (kể cả các thư mục con), tham số -Recurse là bắt buộc. Nếu không có tham số này, lệnh Copy-Item sẽ chỉ sao chép thư mục rỗng mà không copy bất kỳ file hoặc thư mục con nào.

Ví dụ: Copy-Item -Path "C:Project" -Destination "D:BackupProject" -Recurse

Nếu thư mục đích chưa tồn tại, PowerShell sẽ tự động tạo nó. Hành vi này khác với sao chép file đơn lẻ, vì khi sao chép thư mục, tham số -Container mặc định giúp duy trì cấu trúc thư mục tại đích.

Sao chép có điều kiện với Filter, Include và Exclude

Khi làm việc với thư mục lớn, bạn thường chỉ cần sao chép một số loại file nhất định. Tham số -Filter hoạt động nhanh hơn -Include vì nó được áp dụng ở cấp độ hệ thống file. Tuy nhiên, -Filter chỉ hỗ trợ một mẫu duy nhất và có giới hạn về cú pháp (chỉ hỗ trợ ký tự đại diện cơ bản).

Với -Include-Exclude,

Mặc định, Copy-Item sao chép nội dung và thuộc tính cơ bản. Để đảm bảo giữ nguyên thời gian tạo, sửa đổi, bạn cần dùng thêm lệnh Set-ItemProperty sau khi sao chép để đồng bộ lại. Nếu bạn muốn sao chép hoàn hảo tất cả metadata (bao gồm cả ACL), hãy dùng Robocopy với tham số /COPYALL hoặc trong PowerShell gọi Start-BitsTransfer với chế độ phù hợp.

Có thể sao chép file qua SSH bằng PowerShell không?

Có. PowerShell 6 trở lên hỗ trợ SSH Remoting, nhưng để sao chép file qua SSH, bạn nên dùng lệnh scp gốc (nếu có OpenSSH) hoặc dùng module Posh-SSH từ PowerShell Gallery. Module này cung cấp lệnh Set-SCPFileGet-SCPFile để sao chép file qua SSH.

Làm sao để xem tiến trình sao chép khi dùng Copy-Item?

Copy-Item không có sẵn thanh tiến trình.

Để đổi tên file trong quá trình sao chép, bạn chỉ cần chỉ định tên mới trong tham số Destination. Ví dụ: Copy-Item -Path "C:oldname.txt" -Destination "D:newname.txt". Nếu bạn sao chép nhiều file và muốn đổi tên hàng loạt, sử dụng vòng lặp ForEach và xử lý tên file bằng các hàm như Get-Date, Rename-Item.

Sao chép file bằng PowerShell có hỗ trợ sao chép file đang mở không?

Không. Copy-Item không thể sao chép file đang bị khóa bởi tiến trình khác. Nếu bạn cần sao chép file đang mở (ví dụ file database), bạn cần sử dụng Volume Shadow Copy (VSS) thông qua Get-WmiObject Win32_ShadowCopy hoặc công cụ chuyên dụng như Symantec Backup Exec. PowerShell có thể tạo shadow copy tạm thời rồi sao chép từ bản snapshot đó.

Lưu ý quan trọng khi sử dụng PowerShell để sao chép file trong môi trường sản xuất

cách sao chép file bằng powershell - Hình 3

Trước khi chạy bất kỳ lệnh sao chép nào, hãy luôn kiểm tra đường dẫn nguồn và đích bằng Test-Path để tránh lỗi. Sử dụng tham số -WhatIf để xem trước kết quả mà không thực hiện thao tác thực sự. Điều này đặc biệt quan trọng khi script có chứa -Recurse-Force, vì chỉ một sai sót nhỏ có thể dẫn đến mất dữ liệu.

Đối với các tác vụ sao chép định kỳ, hãy triển khai cơ chế ghi log chi tiết. Ví dụ: ghi lại tên file, kích thước, thời gian bắt đầu, thời gian kết thúc, và trạng thái (thành công/thất bại) vào file văn bản. Điều này giúp bạn dễ dàng kiểm tra và khắc phục sự cố sau này.

Cuối cùng, hãy cân nhắc sử dụng PowerShell 7 thay vì Windows PowerShell 5.1 khi có thể. PowerShell 7 chạy trên.NET Core, có hiệu suất tốt hơn, hỗ trợ đa nền tảng và cải thiện khả năng xử lý lỗi cho các thao tác file.

Kết luận

cách sao chép file bằng powershell - Hình 2

Cách sao chép file bằng PowerShell đơn giản nhưng lại vô cùng linh hoạt và mạnh mẽ nếu bạn hiểu rõ các tham số của lệnh Copy-Item cũng như cách kết hợp chúng với các cmdlet khác. Từ việc sao chép một file đơn lẻ, đồng bộ thư mục, đến xây dựng hệ thống backup tự động, PowerShell đều đáp ứng tốt. Tuy nhiên, bạn cần nhận thức rõ hạn chế của nó so với Robocopy hay BITS để chọn công cụ phù hợp cho từng tình huống. Hãy thực hành thường xuyên với các ví dụ trong bài viết này để nâng cao kỹ năng và tự động hóa công việc quản trị của mình một cách hiệu quả.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *