Perintah baris perintah untuk menyalin seluruh direktori (termasuk folder direktori) ke direktori lain

68

menggunakan baris perintah, saya ingin menyalin satu direktori ke yang lain. Misalnya ada direktori C:/testdan C:/test2.

Saya ingin menyalin C:/testke dalam C:/test2sehingga hasilnya akanC:/test2/test

Semua yang saya telah menemukan sejauh ini hanya akan menyalin file dan folder yang terdapat di C:/testdalam C:/test2, tapi daun keluar direktori induk.

Scott Chamberlain
sumber
1
coba gunakan xcopy

Jawaban:

50

Coba gunakan XCOPYdengan /Esakelar. Info lebih lanjut di sini .

Saya belum pernah mengakses informasi ini dari otak saya selama bertahun-tahun !

MEMPERBARUI

Dokumentasi mengatakan bahwa salinan semua file dan subdirektori dari direktori source (yang berarti bahwa direktori induk tidak diciptakan), sehingga Anda akan harus membuat testdi C:\test2pertama dan kemudian menggunakan XCOPY.

vivin
sumber
2
Tombol '/ T' pada Xcopy akan melakukan copy struktur direktori & subdirektori tanpa file.
mfg
2
Lebih baik digunakan robocopy /CREATE /COPYALL /DCOPY:T src dstuntuk hanya menyalin folder dan mengosongkan file tetapi mempertahankan semua cap waktu dan atribut lainnya.
user1016274
2
Ini sebenarnya tidak memberikan jawaban untuk pertanyaan karena folder testmasih perlu dibuat.
IGRACH
3
@IGRACH Saya pikir md testdan kemudian menggunakan xcopyitu sangat jelas.
vivin
1
Nah pertanyaannya adalah tentang copyfolder tidak membuat folder baru dan kemudian menyalin isi di dalamnya.
IGRACH
35
xcopy c:\test c:\test2\test /s /e /h

Ini adalah info tentang XCOPY [ 1 , 2 ]

Cepat
sumber
2
Bagaimana cara berhenti meminta saya untuk memasukkan "D"?
YumYumYum
2
@YumYumYum: Anda dapat menggunakan / I switch: "/ I Jika tujuan tidak ada dan menyalin lebih dari satu file, anggap tujuan itu harus berupa direktori."
Thijs Tijsma
18

Gunakan ROBOCOPY jika Anda membuat skrip cadangan. xcopy telah ditinggalkan dan kemungkinan akan dihapus dari penggunaan dalam waktu dekat. robocopy dapat melakukan semua yang bisa xcopy. Ini juga lebih fleksibel dan dapat diandalkan. Membuat skrip dengan robocopy akan menjadi bukti di masa depan.


  1. Gunakan robocopy untuk menyalin folder dengan mudah. Perintah robocopy menggantikan perintah xcopy. Itu dapat dengan cepat menyalin seluruh folder tanpa harus khawatir tentang menentukan konten. Misalnya, untuk menyalin semua konten direktori C: \ tools ke folder baru D: \ backup \ tools, masukkan yang berikut ini:

    robocopy C:\tools D:\backup\tools /e
    

    Pengubah / e memberitahu robocopy untuk memasukkan semua subdirektori. Ini termasuk folder kosong. robocopy akan secara otomatis menyalin file tersembunyi dan sistem. Ini akan membuat direktori baru jika tidak ada di lokasi target.

  2. Mencerminkan sebuah direktori. Mencerminkan direktori sangat bagus untuk membuat cadangan. Opsi mirror dari robocopy akan menyalin semua konten dari sumber ke tujuan. Kemudian akan menghapus apa pun di tujuan yang tidak ada di sumbernya. Ini memastikan bahwa cadangan Anda hanya memiliki versi terbaru dari file Anda. Misalnya, untuk membuat mirror C: \ Users \ My Documents ke D: \ backup \ My Documents, masukkan yang berikut ini: [4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    Fungsi ini akan mempertahankan semua izin file asli.

  3. Aktifkan memulai kembali. Anda mungkin ingin memasukkan kemampuan untuk memulai kembali proses seandainya koneksi terputus di tengah salinan.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Catat proses penyalinan. robocopy memungkinkan Anda membuat file log. Ini dapat membantu Anda menemukan masalah atau menghasilkan arsip dari apa yang telah disalin.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    Pengubah / log + akan menambahkan file log yang sudah ada alih-alih menimpanya. Jika Anda lebih suka menimpa file log yang lama, gunakan /log:.txt.

Program-Me-Rev
sumber
8

Saya merekomendasikan robocopy lebih dari xcopy , karena ia memiliki lebih banyak pilihan, termasuk menjaga cap waktu yang utuh, yang menurut saya penting.

Robocopy perlu ditambahkan pada XP / 2003, tetapi standar dari Vista dan seterusnya.

Sebenarnya saya biasanya menggunakan xxcopy , tetapi versi 64-bit tidak gratis.

paradroid
sumber
1
robocopyadalah program Windows. Pertanyaannya adalah tentang DOS.
grawity
9
@Grawity: Kemungkinan dia benar-benar menggunakan 16-bit DOS sangat kecil dibandingkan dengan probabilitas tinggi dia memanggil CMD 'DOS', seperti yang biasa terjadi di dunia nyata.
paradroid
pertanyaan sebenarnya adalah: apakah robocopy adalah program Microsoft?
knocte
@knocte ya itu
yossico
5
XCOPY SourceDrive: DestinationDrive: /S /E

Misalnya, jika Anda perlu menyalin E:data H:drive ke drive (hard drive eksternal) melalui baris perintah atau dari lingkungan perintah xboot.

xboot:\>XCOPY E:\ "H:\BackupFolder\" /S /E
Syed khalid Mohammed
sumber
2
/ S tidak diperlukan saat / E hadir. windows-commandline.com/copy-directory-command-line
Giri
3

Jika pertanyaan awal adalah apa yang saya cari jawabannya, maka saya, dan jelas tidak ada orang di atas, yang memberikan solusi yang jelas.

Yang saya cari adalah menyalin direktori tes ke direktori test2 tanpa harus mengetiknya lagi. Sesuatu seperti

xcopy /isvy c:\test d:\test2

di mana d:\test2\testtidak ada sebelum salinan tetapi setelah. Ini akan menghemat uji salah ketik yang kedua kalinya di jalur tujuan. Perintah di atas akan menyalin semua file dan direktori apa saja ke dalam test2 tetapi tidak akan membuat direktori tes.

Sejauh ini

xcopy /isvy c:\test d:\test2\test

adalah satu-satunya cara yang saya temukan untuk menyelesaikan pekerjaan ini. Sekali lagi jika Anda memiliki masalah pengetikan, tidak ada jaminan bahwa direktori sumber dan tujuan akan cocok.

Alternatif untuk memperbaiki ini adalah

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

Ini menetapkan direktori tujuan dalam mydirvariabel kemudian menggunakan variabel itu di kedua jalur sumber dan tujuan. Jika Anda salah mengetik variabel, Anda akan mendapatkan kesalahan atau direktori tujuan mungkin ada %di awal dan akhir.

Ini lebih lama untuk mengetik tetapi lebih sedikit peluang untuk mendapatkan nama yang salah. Mereka akan terlihat.

Tagihan
sumber
Ini sebenarnya xcopy /ievy c:\test d:\test2\testuntuk menjaga struktur pohon direktori, dan set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%hanya 1 & akan cukup, karena hasil pengaturan nilai selalu berhasil.
NetwOrchestration
0
xcopy SWITCHES SOURCE DESTINATION

Di mana SWITCHESbisa:

  • Untuk menyalin seluruh struktur direktori:

    /hiev

  • Untuk menimpa file di tujuan (jika folder tujuan sudah ada):

    /hievry

  • Untuk menimpa dan juga menyalin dengan Atribut ACL +:

    /hievxok

Paling cocok untuk kasus Anda:

xcopy /hievry C:\test C:\test2\test

NetwOrchestration
sumber
0

Saya memiliki situasi yang sama di mana saya perlu menyalin sejumlah folder termasuk nama folder ke lokasi tujuan, dan berharap pertanyaan ini ditandai menjawab akan membantu, tetapi sebenarnya tidak.

Pertama, pasti ada saat-saat di mana seseorang membutuhkan kemampuan ini dan saya bertemu ketika saya harus menyalin folder dari C: \ Windows \ Assembly \ GAC_MSIL. Windows Explorer menolak untuk menunjukkan folder ini, jadi Anda harus menggunakan command prompt.

Jika Anda terbiasa dengan folder GAC, Anda akan tahu bahwa nama folder itu tidak mudah dan mudah salah jika Anda salah ketik.

Jadi membuat direktori sebelumnya bukanlah pilihan - kecuali Anda menggunakan skrip - yang akhirnya saya gunakan, karena ini adalah satu-satunya solusi nyata.

Pertama-tama, buang folder yang ingin Anda salin ke file sementara, ini biasanya didasarkan pada beberapa pola misalnya

dir /B policy* > Folders.txt

Kemudian putar entri di dump dan salin ke tujuan. Xcopy akan mengurus pembuatan folder jika Anda mengakhiri argumen tujuan dengan garis miring terbalik (\)

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

Masukkan kedua perintah ini dalam file batch dan jalankan.

Sekarang jika hanya xcopy atau robocopy yang sudah ada di dalamnya.

Mahendrent
sumber
0

XCOPY SourceDrive: DestinationDrive: / S / E

Noor All Safaet
sumber
Selamat Datang di Pengguna Super! Bisakah Anda menjelaskan ini? (terutama /S /Ebendera)
bertieb
0

Saya telah sampai pada jawaban alternatif fungsional untuk pertanyaan Anda.

Pertama, menggunakan FORFILESdengan /Sparameter, menganugerahkan bahwa setiap sub-direktori C:\testakan tercapai.

Kedua, dengan /Cparameter, dimungkinkan untuk memulai rantai perintah dengan variabel asli, yang memungkinkan untuk membuat direktori identik di tujuan, dan kemudian menyalin file ke dalamnya, menggunakan dua struktur kondisional.

Struktur kondisional pertama @isdir==TRUE(pastikan untuk menggunakan huruf kapital), memungkinkan untuk mendapatkan direktori hanya dari sumber, kemudian membuatnya pada takdir dengan MKDIR [path]\@relpathdi akhir.

Akhirnya, yang kedua memastikan bahwa itu hanya bekerja dengan file @isdir==FALSE, dan kemudian perintah COPY menyelesaikan pekerjaan, mendapatkan semua file yang dicapai oleh perintah FORFILES, ditetapkan [path]@relpathsebagai tujuan, untuk menyalin file ke dalam direktori yang baru saja dibuat.

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

Semoga itu bisa membantu semua orang di sekitar sini.

MauGusVicen
sumber
-2

Ini akan melakukannya dari GUI, tidak tahu bagaimana mereka melakukannya.

"... program kecil akan memungkinkan Anda untuk memilih" dari direktori "dan" ke dalam direktori ", dan itu akan melanjutkan untuk menyalin HANYA struktur direktori."

http://www.rjlsoftware.com/software/utility/treecopy/

NginUS
sumber