Pertanyaan Salin file tanpa menimpa


Saya hanya tidak bisa menemukan cara pada baris perintah untuk mengatakan "salin semua file dari direktori A ke direktori B, tetapi jika file sudah ada di direktori B, jangan menimpanya, tidak peduli file mana yang lebih baru , dan jangan tanya saya. "

Saya telah melalui copy, pindah, xcopy & robocopy, dan yang paling dekat saya bisa dapatkan adalah bahwa Anda dapat memberitahu robocopy "copy A ke B, tetapi jangan menimpa file baru dengan file yang lebih lama," tetapi itu tidak bekerja untuk saya . Saya melihat xxcopy, tetapi membuangnya, karena saya tidak ingin memiliki ketergantungan pihak ketiga pada acara pasca-pembuatan Visual Studio yang akan mengharuskan pengguna SVN lain untuk menginstal alat tersebut untuk melakukan pembuatan.

Saya ingin menambahkan baris perintah ke acara pasca-pembuatan di Visual Studio 2010 sehingga file yang dihasilkan dari T4 template untuk yang baru EF objek model didistribusikan ke folder proyek di mana mereka berada, tetapi file yang diregenerasi untuk objek yang ada tidak menimpa file tujuan yang berpotensi diedit.

Karena template T4 meregenerasi, file sumber selalu lebih baru, dan saya tidak dapat menggunakan switch "yang lebih baru" dengan andal, saya tidak berpikir.

Saya menggunakan kelas parsial untuk item yang dapat saya gunakan, tetapi ada hal lain yang saya hasilkan yang tidak dapat menggunakan kelas parsial (mis. Membuat file default EditorTemplate atau DisplayTemplate * .ascx).

Ada yang punya masalah serupa yang mereka atasi?


75
2017-11-19 19:50


asal


Jawaban:


For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"

31
2017-11-19 20:04



Robocopy, atau "Robust File Copy", adalah perintah replikasi direktori baris perintah. Ini telah tersedia sebagai bagian dari Windows Resource Kit dimulai dengan Windows NT 4.0, dan diperkenalkan sebagai fitur standar Windows Vista, Windows 7 dan Windows Server 2008. 

   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

Untuk menguraikan (menggunakan Hydrargyrum, HailGallaxar dan Andy Schmidt jawaban):

  • /E membuat Robocopy secara rekursif menyalin subdirektori, termasuk yang kosong.
  • /XC tidak termasuk file yang ada dengan cap waktu yang sama, tetapi berbeda ukuran file. Robocopy biasanya menimpa mereka.
  • /XN tidak termasuk file yang ada yang lebih baru dari salinan di tempat tujuan direktori. Robocopy biasanya menimpa mereka.
  • /XO tidak termasuk file yang sudah ada lebih lama dari salinan di tempat tujuan direktori. Robocopy biasanya menimpa mereka.

Dengan perubahan, Lama, dan Baru kelas dikecualikan, Robocopy tidak persis apa yang diinginkan poster asli - tanpa perlu memuat lingkungan scripting.

Referensi: Technet, Wikipedia
Unduh dari: Tautan Unduh Microsoft  (Tautan terakhir diverifikasi pada 30 Maret 2016)


159
2017-11-19 20:05



Solusi Belisarius bagus.

Untuk menguraikan jawaban yang sedikit singkat:

  • /E membuat Robocopy secara rekursif menyalin subdirektori, termasuk yang kosong.
  • /XC tidak termasuk file yang ada dengan cap waktu yang sama, tetapi berbeda ukuran file. Robocopy biasanya menimpa mereka.
  • /XN tidak termasuk file yang ada yang lebih baru dari salinan di sumbernya direktori. Robocopy biasanya menimpa mereka.
  • /XO tidak termasuk file yang sudah ada lebih lama dari salinan di sumbernya direktori. Robocopy biasanya menimpa mereka.

Dengan perubahan, Lama, dan Baru kelas dikecualikan, Robocopy tidak persis apa yang diinginkan poster asli - tanpa perlu memuat lingkungan scripting.


41
2017-12-06 08:17



Anda dapat mencoba ini:

echo n | copy /-y <SOURCE> <DESTINATION>

-y hanya meminta sebelum menimpa dan kita dapat menyambungkan n ke semua pertanyaan itu. Jadi ini pada intinya hanya menyalin file yang tidak ada. :)


32
2018-05-22 16:14



Ini dia dalam bentuk file batch:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"

5
2017-11-19 20:06



Saya hanya ingin mengklarifikasi sesuatu dari pengujian saya sendiri.

@Hydrargyrum menulis:

  • / XN mengecualikan file yang ada lebih baru daripada salin di direktori sumber. Robocopy biasanya menimpa mereka.
  • / XO tidak termasuk file yang sudah ada lebih lama dari salinan di direktori sumber. Robocopy biasanya menimpa mereka.

Ini sebenarnya terbalik. XN melakukan "eXclude Newer" file tetapi tidak termasuk file yang lebih baru dari pada salinan di tujuan direktori. XO melakukan "eXclude Older", tetapi tidak termasuk file yang lebih lama dari salinan di tujuan direktori.

Tentu saja lakukan pengujian Anda sendiri seperti biasa.


2
2018-04-16 12:40



Ada cara yang aneh untuk melakukan ini dengan xcopy:

echo nnnnnnnnnnn | xcopy /-y source target

Cukup sertakan sebanyak n sebagai file yang Anda salin, dan itu akan menjawab n untuk semua pertanyaan yang ditimpa.


2
2018-03-23 18:19



robocopy src dst /MIR /XX

/ XX: eXclude "eXtra" file dan dirs (ada di tujuan tetapi bukan sumber). Ini akan mencegah penghapusan dari tujuan. (ini adalah default)


2
2018-02-12 16:13



Robocopy dapat diunduh di sini untuk sistem yang belum terinstal. (Yaitu Windows Server 2003.)

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (tidak perlu boot ulang untuk instalasi)

Ingatlah untuk mengatur jalan Anda ke exe robocopy. Anda melakukan ini dengan mengklik kanan "komputer saya"> properti> lanjutan> "Variabel Lingkungan", lalu cari variabel sistem jalur dan tambahkan ini ke bagian akhir: "; C: \ Program Files \ Windows Resource Kits \ Tools" atau di mana pun Anda berada menginstalnya. Pastikan untuk meninggalkan string variabel path yang sudah ada dan tambahkan saja addtional path.

setelah jalur diatur, Anda dapat menjalankan perintah yang disarankan belisarius. Ini bekerja dengan baik.


1
2018-04-09 15:37



Ini tidak akan membiarkan saya berkomentar langsung pada pesan yang salah - tetapi biarkan saya hanya memperingatkan semua orang, bahwa definisi opsi / XN dan / XO REVERSED dibandingkan dengan apa yang telah diposting di pesan sebelumnya.

Opsi Exclude Older / Newer file konsisten dengan informasi yang ditampilkan dalam pencatatan RoboCopy: RoboCopy akan melakukan iterasi melalui SOURCE dan kemudian melaporkan apakah setiap file dalam SOURCE "OLDER" atau "NEWER" daripada file di tujuan.

Akibatnya, / XO akan mengecualikan file OLDER SOURCE (yang intuitif), bukan "lebih tua dari sumber" seperti yang diklaim di sini.

Jika Anda ingin menyalin hanya file sumber baru atau yang diubah, tetapi hindari mengganti file tujuan yang lebih baru, maka / XO adalah opsi yang benar untuk digunakan.


1
2018-05-08 16:49