Powershell Copy-Item secara rekursif tetapi tidak menyertakan nama folder

19

Ini pertanyaan bodoh, tapi saya tidak tahu mengapa itu tidak berhasil.

Saya mencoba menyalin file dari FolderA ke FolderB secara rekursif. Saya melakukan ini:

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

Ini bekerja dengan baik, tidak ada masalah.

Kecuali hasil di FolderB adalah ini:

C:\FolderB\FolderA\file.txt

Sedangkan yang saya inginkan:

C:\FolderB\file.txt

Hal bodoh apa yang saya lewatkan?

CleverPatrick
sumber
4
Anda tidak melakukan hal bodoh, salinan-item hanyalah PITA.
StingyJack

Jawaban:

27

Perintah Anda memberi tahu PowerShell untuk menyalin folder itu sendiri, dengan semua kontennya, ke folder tujuan. Untuk menyalin hanya konten folder asli, ubah jalur Anda sebagai berikut:

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

Perhatikan tanda bintang (*) setelah nama folder. Ini akan menyalin konten (termasuk subfolder) folder, tetapi bukan folder itu sendiri ke folder tujuan.

Menggunakan Cmdlet Copy-Item

FastEthernet
sumber
2
Perhatikan bahwa ini tidak menyalin struktur folder jika folder tujuan tidak ada. Menelepon md "C:\FolderB"sebelumnya Copy-Itemsepertinya menghindari masalah ini.
zett42
Membangun komentar @ zett42 di atas, jika folder tujuan belum ada, tampaknya Copy-Itemakan mereproduksi struktur folder, tetapi satu tingkat turun (misalnya C:\FolderA\B\Cdisalin ke C:\FolderB\Cbukan C:\FolderB\B\C), dan mungkin juga gagal ketika beberapa subfolder ada. Selalu pastikan folder tujuan ada sebelum memanggil Copy-Item. Baunya seperti bug (saya tidak bisa melihat alasan mengapa perilaku tidak konsisten ini diinginkan).
Marc Durdin
1
Lihat juga komentar di SO .
Marc Durdin
0

Anda dapat menggunakan -File -Rekur untuk Menyalin File Saja Secara Rekursif:

Copy-Item -Path "C: \ Source" -Destination "C: \ Dest" -File -recurse -Force -Verbose

Atau gunakan -Directory -Recse hanya untuk menyalin struktur folder kosong:

Copy-Item -Path "C: \ Source" -Destination "C: \ Dest" -Directory -recurse -Force -Verbose

Salam,

Paul Pedroza

Paul Andres Pedroza M
sumber
-1
Copy-Item -Path "C:\FolderA" -Destination "C:\FolderB" -recurse -Force -Verbose

Juga akan bekerja.

Mark Gladson
sumber
1
Tampaknya ini merupakan komentar pada jawaban serupa FastEthernet. Jika Anda ingin mengajukan jawaban alternatif, Anda harus menjelaskan mengapa jawabannya menjawab.
Blackwood
Itu menciptakan C: \ FolderB jika tidak ada - tetapi menciptakan C: \ FolderB \ FolderA jika C: \ FolderB memang ada. Jika Anda menjalankan perintah itu dua kali, Anda bisa mendapatkan dua salinan semuanya di lokasi yang sedikit berbeda! Sakit sekali.
Lamarth