Sepertinya saya tidak dapat menemukan cara di 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 meminta saya. "
Saya telah melalui proses copy, move, xcopy & robocopy, dan hal terdekat yang bisa saya dapatkan adalah Anda dapat memberi tahu robocopy "copy A ke B, tapi jangan menimpa file baru dengan file yang lebih lama," tetapi itu tidak berhasil untuk saya . Saya melihat xxcopy, tetapi membuangnya, karena saya tidak ingin memiliki ketergantungan pihak ketiga pada acara pasca-pembuatan Visual Studio yang akan memerlukan pengguna SVN lain untuk menginstal alat itu untuk melakukan pembangunan.
Saya ingin menambahkan baris perintah ke acara pasca-pembangunan di Visual Studio 2010 sehingga file yang dihasilkan dari template T4 untuk objek model EF baru dapat didistribusikan ke folder proyek tempat mereka berada, tetapi file yang dibuat ulang untuk objek yang ada jangan menimpa file tujuan yang mungkin diedit.
Karena template T4 dibuat ulang, file sumber selalu lebih baru, dan saya tidak dapat menggunakan tombol "lebih baru" dengan andal, saya rasa.
Saya menggunakan kelas parsial untuk item yang saya bisa, tetapi ada hal lain yang saya hasilkan yang tidak dapat menggunakan kelas parsial (misalnya membuat file EditorTemplate atau DisplayTemplate * .ascx default).
Adakah yang memiliki masalah serupa yang telah mereka selesaikan?
sumber
cmd.exe
'sfor
perintah? Jika tidak, saya sarankan Anda menjalankanfor /?
dan menggunakannya.Jawaban:
sumber
~nx
di%~nxF
sebenarnya artinya?~nxF
variabelF
berubah menjadi nama file dan ekstensi.Untuk menguraikan (menggunakan jawaban Hydrargyrum, HailGallaxar dan Andy Schmidt):
/E
membuat Robocopy menyalin subdirektori secara rekursif, termasuk yang kosong./XC
mengecualikan file yang ada dengan stempel waktu yang sama, tetapi ukuran file berbeda. Robocopy biasanya menimpa itu./XN
mengecualikan file yang sudah ada yang lebih baru dari salinan di direktori tujuan. Robocopy biasanya menimpa itu./XO
mengecualikan file yang sudah ada yang lebih lama dari salinan di direktori tujuan. Robocopy biasanya menimpa itu.Dengan pengecualian kelas Berubah, Lebih Lama, dan Lebih Baru, Robocopy melakukan apa yang diinginkan pembuat aslinya - tanpa perlu memuat lingkungan skrip.
Referensi: Technet , Wikipedia
Unduh dari: Tautan Unduhan Microsoft (Tautan terakhir diverifikasi pada 30 Maret 2016)
sumber
/e
? Bagaimana jika Anda menggunakan/s
sebagai gantinya? Saya tidak ingin banyak sub-folder kosong.Solusi Belisarius bagus.
Untuk menguraikan jawaban yang sedikit singkat itu:
/E
membuat Robocopy menyalin subdirektori secara rekursif, termasuk yang kosong./XC
mengecualikan file yang ada dengan stempel waktu yang sama, tetapi ukuran file berbeda. Robocopy biasanya menimpa itu./XN
mengecualikan file yang sudah ada yang lebih baru dari salinan di direktori sumber. Robocopy biasanya menimpa itu./XO
mengecualikan file yang ada yang lebih lama dari salinan di direktori sumber. Robocopy biasanya menimpa itu.Dengan pengecualian kelas Berubah, Lebih Lama, dan Lebih Baru, Robocopy melakukan apa yang diinginkan pembuat aslinya - tanpa perlu memuat lingkungan skrip.
sumber
Anda bisa mencoba ini:
-y
cukup meminta sebelum menimpa dan kita bisa menyalurkan n ke semua pertanyaan itu. Jadi ini pada dasarnya hanya menyalin file yang tidak ada. :)sumber
copy /-y
secara otomatis menganggap Tidak setelah stdin kehabisan masukan. Anda dapat menghilangkan eksplisit pertaman
, atau menyalurkan< nul
ke dalamnya, dan hal yang sama terjadi.Ini dia dalam bentuk file batch:
sumber
Saya hanya ingin mengklarifikasi sesuatu dari pengujian saya sendiri.
@Hydrargyrum menulis:
Ini sebenarnya mundur. XN melakukan file "eXclude Newer" tetapi tidak menyertakan file yang lebih baru dari salinan di direktori tujuan . XO melakukan "eXclude Older", tetapi tidak menyertakan file yang lebih lama dari salinan di direktori tujuan .
Tentu saja lakukan pengujian Anda sendiri seperti biasa.
sumber
Ada cara aneh untuk melakukan ini dengan xcopy:
Cukup sertakan sebanyak n sebagai file yang Anda salin, dan itu akan menjawab n untuk semua pertanyaan timpa.
sumber
copy
, lihat jawaban ini , khususnya komentar @mwfearnley:copy /-y
secara otomatis mengasumsikann
setelah stdin habis, jadi Anda dapat misalnyaecho n
hanya sekali dan masih berfungsi./ XX: eXclude file dan direktori "eXtra" (ada di tujuan tetapi bukan sumber). Ini akan mencegah penghapusan dari tujuan. (ini defaultnya)
sumber
Robocopy dapat diunduh di sini untuk sistem yang belum diinstal. (Yaitu Windows Server 2003.)
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (tidak diperlukan booting ulang untuk instalasi)
Ingatlah untuk mengatur jalur Anda ke robocopy exe. Lakukan ini dengan mengklik kanan "komputer saya"> properti> lanjutan> "Variabel Lingkungan", lalu temukan variabel sistem jalur dan tambahkan ini di akhir: "; C: \ Program Files \ Windows Resource Kits \ Tools" atau di mana pun Anda menginstalnya. Pastikan untuk meninggalkan string variabel path yang sudah ada dan tambahkan path tambahan.
setelah jalur diatur, Anda dapat menjalankan perintah yang disarankan Belisarius. Ini bekerja dengan baik.
sumber
Itu tidak akan membiarkan saya berkomentar secara langsung pada pesan yang salah - tapi izinkan saya hanya memperingatkan semua orang, bahwa definisi opsi / XN dan / XO DIBALIKKAN dibandingkan dengan apa yang telah diposting di pesan sebelumnya.
Opsi Kecualikan file Lama / Baru konsisten dengan informasi yang ditampilkan di pencatatan RoboCopy: RoboCopy akan mengulang melalui SUMBER dan kemudian melaporkan apakah setiap file di SUMBER "LEBIH LAMA" atau "LEBIH BARU" daripada file di tujuan.
Akibatnya, / XO akan mengecualikan file SUMBER LAMA (yang intuitif), bukan "lebih tua dari sumber" seperti yang diklaim di sini.
Jika Anda hanya ingin menyalin file sumber baru atau yang diubah, tetapi menghindari mengganti file tujuan yang lebih baru, maka / XO adalah opsi yang tepat untuk digunakan.
sumber
Pendekatan sederhana adalah menggunakan opsi / MIR, untuk mencerminkan dua direktori. Pada dasarnya ini hanya akan menyalin file baru ke tujuan. Di perintah berikutnya ganti sumber dan tujuan dengan jalur ke folder Anda, skrip akan mencari file apa pun dengan ekstensi apa pun.
sumber
Inilah yang berhasil bagi saya. Saya menggunakan ini untuk "menambahkan" file ke drive lain, tanpa menimpa.
File batch: robocopy-missingfiles.bat
Contoh:
Lakukan pengujian sebelum implementasi.
sumber