File batch untuk menyalin file dari satu folder ke folder lain

235

Saya memiliki folder penyimpanan di jaringan di mana semua pengguna akan menyimpan data aktif mereka di server. Sekarang server akan diganti dengan yang baru karena masalah tempat jadi saya perlu menyalin file folder sub dari folder penyimpanan server lama ke folder penyimpanan server baru. Saya memiliki di bawah mantan:

dari \ Oldeserver \ storage \ data & files ke \ New server \ storage \ data & files.

pengguna73628
sumber
3
Saya berasumsi Anda sedang berbicara tentang lingkungan Windows?
Alan Plum
4
@ HugoM.Zuleta, saya mengetahui file .bat. Tapi "file batch" tidak selalu menjamin lingkungan Windows. Penggunaan istilah pra-tanggal Windows (seperti halnya file .bat) dan saya bahkan telah melihat pemula menggunakan istilah ini untuk berarti "skrip shell" di lingkungan * nix.
Alan Plum
1
@ Pluma saya setuju, dan ini sebagian besar karena mereka merujuk pada operasi batch yang dilakukan oleh alat skrip OS mereka.
Hugo M. Zuleta

Jawaban:

441

xcopy.exe pasti teman Anda di sini. Itu dibangun ke dalam Windows, jadi biayanya tidak seberapa.

Hanya xcopy /s c:\source d:\target

Anda mungkin ingin mengubah beberapa hal; beberapa opsi yang kami tambahkan juga meliputi:

  • /s/e - Salinan rekursif, termasuk menyalin direktori kosong.
  • /v- tambahkan ini untuk memverifikasi salinan terhadap aslinya. lebih lambat, tetapi untuk paranoid.
  • /h - menyalin sistem dan file tersembunyi.
  • /k- salin atribut read-only bersama dengan file. jika tidak, semua file menjadi baca-tulis.
  • /x- jika Anda peduli tentang izin, Anda mungkin ingin /oatau /x.
  • /y - jangan meminta sebelum menimpa file yang ada.
  • /z- jika Anda pikir salinannya mungkin gagal dan Anda ingin memulai kembali, gunakan ini. Itu menempatkan penanda pada setiap file saat disalin, sehingga Anda dapat menjalankan kembali perintah xcopy untuk mengambil dari tempat itu ditinggalkan.

Jika Anda berpikir xcopy mungkin gagal sebagian (seperti ketika Anda menyalin melalui koneksi jaringan yang rapuh), atau bahwa Anda harus menghentikannya dan ingin melanjutkannya nanti, Anda dapat menggunakannya xcopy /s/z c:\source d:\target.

Semoga ini membantu.

lavinio
sumber
2
@Iavinio Ini menanyakan file atau direktori saat menyalin arsip. Apakah ada cara untuk menekan itu?
Bitterblue
Hai @ mini-me - Saya menemukan bahwa jika itu adalah direktori, Anda dapat menentukan karakter trailing '/' dan Anda tidak akan melihat pesan itu.
DaveDev
2
/i- Jika tujuan tidak ada dan menyalin lebih dari satu file, anggap tujuan itu harus berupa direktori.
lavinio
1
Bagaimana cara menyalin satu file dari direktori?
Charan Raju CR
10
Untuk menyiasati prompt "file atau direktori", lakukan perintah seperti itu ... echo f | xcopy /s /f srcfile destfile
wintondeshong
56

Favorit saya untuk membuat cadangan data adalah:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

Aku adalah cermin. Anda juga dapat menggunakan / mov untuk memindahkan file. Itu mereproduksi folder yang sama persis. Itu dapat menghapus / menimpa file sesuai kebutuhan. Bekerja bagus untukku. Ini lebih cepat daripada xcopy / copy. Itu dibangun di Windows juga.

Sumber: http://technet.microsoft.com/en-us/library/cc733145.aspx

Etienne Dupuis
sumber
2
Saya mendukung ini. Ini sangat cepat. jauh lebih cepat daripada xcopy
Ike
Apakah ada cara untuk menghilangkan thumbs.db secara rekursif mirip dengan ini?
drooh
54

Untuk lebih jelasnya, ketika Anda menggunakan xcopy /s c:\source d:\target, letakkan "" di sekitar c: \ source dan d: \ target, jika tidak Anda mendapatkan kesalahan.

yaitu jika ada spasi di jalan yaitu jika Anda memiliki:

"C:\Some Folder\*.txt"

tetapi tidak diperlukan jika Anda memiliki:

C:\SomeFolder\*.txt
Ike
sumber
1
Tanda kutip membuat trik;) terima kasih saya juga menggunakan / Y untuk mengganti file jika ada :) Contoh: ´´´xcopy / s "c: \ source" "d: \ target" / Y```
Joel Carneiro
18

Anda mungkin ingin melihat XCopy atau RoboCopy yang merupakan solusi yang cukup komprehensif untuk hampir semua operasi penyalinan file di Windows.

Joey
sumber
3
RoboCopy tampaknya lebih baik daripada XCopy karena xcopy meminta keputusan file atau folder. Dan saya tidak bisa menolaknya. Ini HARUS dapat bekerja secara otomatis penuh.
Bitterblue
@ mini-saya, saya tahu ini sangat terlambat tetapi saya tidak dapat menemukan switch yang relevan sama. Saya akhirnya terpaksa membuat file kosong dengan nama yang sama dengan yang saya salin dan kemudian menimpanya. Jika file sudah ada maka tidak perlu ditanya apakah itu file atau direktori. (Jika Anda ingin direktori otomatis maka Anda dapat menambahkan '/' ke path dan itu akan melakukannya). Semoga ini bisa membantu orang di masa depan!
Tom C
2
@Eve Sebagai referensi, echo f | xcopy source destination /yakan membuatnya otomatis. Itu memberikan semua pertanyaan "f" sebagai tanggapan. Itu juga akan melewati permintaan menimpa (f diambil sebagai ya, saya pikir).
ndm13
14

Untuk memintas 'tentukan nama file atau nama direktori pada target (F = file, D = direktori)?' cepat dengan xcopy, Anda dapat melakukan hal berikut ...

echo f | xcopy /f /y srcfile destfile

atau bagi kita yang hanya menyalin substruktur / folder besar:

gunakan / i yang menentukan tujuan harus direktori jika menyalin lebih dari satu file

musim dingin
sumber
(Gema "f" untuk file atau "D" untuk direktori)
JinSnow
mencoba melakukan ini sekarang dan itu tidak berfungsi - saya selalu mendapatkan petunjuk ketika mencoba untuk menyalin satu file ke direktori lain. Menggunakan Win 10 jika itu memengaruhi sama sekali gema f | xcopy / f / y "My.dll" "C: \ myFolder \ My.dll". Saya sudah mencobanya dengan kombinasi switch lain tetapi tidak berhasil (dan huruf kapital F)
Prof
3

jika Anda ingin menyalin file yang tidak menggunakan path absolut, path relatif dengan kata lain:

jangan lupa untuk menulis backslash di jalur AND NOT slash

contoh:

    copy children-folder\file.something .\other-children-folder

PS: jalur absolut dapat diambil dengan menggunakan wildcard ini yang disebut "parameter batch"

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

periksa dokumentasi di sini tentang salinan: https://technet.microsoft.com/en-us/library/bb490886.aspx

dan juga di sini untuk dokumentasi parameter kumpulan: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

marcdahan
sumber
Saya pikir itu disebut backslash.
Leon Bohmann
2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.
David Castro
sumber
0

Lihatlah rsyncalat Windows berbasis NASBackup . Ini akan menjadi bonus jika Anda berkenalan dengan perintah rsync.

nik
sumber