Powershell Copy-Item đệ quy nhưng không bao gồm tên thư mục


19

Đây là một câu hỏi ngu ngốc, nhưng tôi không biết tại sao nó không hoạt động.

Tôi đang cố gắng sao chép các tập tin từ FolderA sang FolderB theo cách đệ quy. Tôi đang làm việc này:

Copy-Item -Path "C:\FolderA\" -Destination "C:\FolderB\" -recurse -Force -Verbose

Nó hoạt động tuyệt vời, không có vấn đề.

Ngoại trừ kết quả trong FolderB là thế này:

C:\FolderB\FolderA\file.txt

Trong khi đó tôi muốn nó là:

C:\FolderB\file.txt

Điều gì rõ ràng ngu ngốc tôi đang thiếu?


4
Bạn không làm gì ngu ngốc, copy-item chỉ là một PITA.
StingyJack

Câu trả lời:


27

Lệnh của bạn đang yêu cầu PowerShell sao chép chính thư mục đó, với tất cả nội dung của nó, vào thư mục đích. Để chỉ sao chép nội dung của thư mục gốc, hãy thay đổi đường dẫn của bạn như sau:

Copy-Item -Path "C:\FolderA\*" -Destination "C:\FolderB\" -recurse -Force -Verbose

Lưu ý dấu hoa thị (*) sau tên thư mục. Điều này sẽ sao chép nội dung (bao gồm các thư mục con) của thư mục, nhưng không sao chép chính thư mục đó vào thư mục đích.

Sử dụng Cmdlet Copy-Item


2
Lưu ý rằng điều này không sao chép cấu trúc thư mục nếu thư mục đích không tồn tại. Gọi md "C:\FolderB"trước Copy-Itemdường như để tránh vấn đề này.
zett42

Dựa trên nhận xét của @ zett42 ở trên, nếu thư mục đích chưa tồn tại, có vẻ như nó Copy-Itemsẽ tái tạo cấu trúc thư mục, nhưng giảm một cấp (ví dụ: C:\FolderA\B\Cđược sao chép vào C:\FolderB\Cthay vì C:\FolderB\B\C) và cũng có thể thất bại khi tồn tại nhiều thư mục con. Luôn đảm bảo thư mục đích tồn tại trước khi gọi Copy-Item. Điều này có mùi giống như một lỗi (tôi không thể thấy bất kỳ lý do tại sao hành vi không nhất quán này sẽ được mong muốn).
Marc Durdin


0

Bạn có thể sử dụng -File -Recurse để chỉ sao chép các tệp đệ quy:

Sao chép-Mục -Path "C: \ Source" -Destination "C: \ Dest" -File -recurse -Force -Verbose

Hoặc sử dụng -Directory -Recurse để chỉ sao chép cấu trúc thư mục empy :

Sao chép-Mục -Path "C: \ Source" -Destination "C: \ Dest" -Directory -recurse -Force -Verbose

Trân trọng,

Paul Pedroza


-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

Cũng sẽ làm việc.


1
Đây dường như là một nhận xét về câu trả lời tương tự của FastEthernet. Nếu bạn muốn đề xuất một câu trả lời thay thế, bạn nên giải thích lý do tại sao nó trả lời câu hỏi.
Blackwood

Điều đó tạo ra C: \ FolderB nếu nó không tồn tại - nhưng tạo C: \ FolderB \ FolderA nếu C: \ FolderB tồn tại. Nếu bạn chạy lệnh đó hai lần, bạn có thể nhận được hai bản sao của mọi thứ ở các vị trí hơi khác nhau! Quá nhiều nỗi đau.
Lamarth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.