xcopy: memindahkan file, bukan menyalin?

11

Saya ingin menggunakan xcopyuntuk memindahkan, bukan menyalin file di jaringan dengan bendera Verifikasi. Saya tidak dapat menemukan saklar pada xcopy untuk memindahkan file, apakah ada yang xmovebisa saya gunakan verify?

Saat ini saya menggunakan xcopy /D /Vtetapi perlu menyingkirkan file di sumber hanya ketika diverifikasi file berhasil disalin ke tujuan.

JBurace
sumber
1
Anda harus menyadari bahwa walaupun menggunakan /vtidak menjamin bahwa file telah ditulis dengan benar: cache dan cache OS berarti bahwa file dalam cache tulis akan diambil dari sana sebelum berhasil dilakukan. Satu-satunya pilihan yang aman adalah membuat salinan dan menjadwalkan verifikasi dan menghapus di waktu mendatang. Secara heuristik saya akan mengatakan bahwa 5 menit sudah cukup, tetapi tidak ada aturan yang keras dan cepat: itu tergantung pada aktivitas disk dan ukuran cache (saya berbicara sebagai orang yang mengalami kegagalan tulis dalam cache).
AFH

Jawaban:

11

Anda harus memeriksa robocopy, itu jauh lebih kuat daripada xcopy. Anda dapat dengan mudah memindahkan file dengan /MOVatau /MOVE.

Untuk memindahkan file saja (hapus dari sumber setelah menyalin)

robocopy from_folder to_folder files_to_copy /MOV

Untuk memindahkan file dan direktori (hapus dari sumber setelah menyalin)

robocopy from_folder to_folder files_to_copy /MOVE

http://ss64.com/nt/robocopy.html

Imtheman
sumber
2
Robocopy tidak memiliki verifysejauh yang saya bisa lihat.
JBurace
@JBurace Jika Anda melihat link saya diposting menyatakan: /MOVE : Move files and dirs (delete from source after copying). Jika tidak menyalin, itu tidak akan menghapus sumbernya.
Imtheman
2
Apa yang terjadi jika dipindahkan, tetapi ukuran file tidak cocok? Inilah mengapa saya perlu melakukan verify. Saya tidak melihat apa pun di info robocopy yang benar-benar memverifikasi kedua filesizes untuk memastikan itu tidak hanya dipindahkan tetapi dipindahkan dengan benar.
JBurace
@JBurace Saya tidak berpikir itu berfungsi seperti itu. Jika tidak menyalin semua file, maka itu akan bertindak seolah-olah tidak ada yang disalin sama sekali, dan karena itu tidak akan menghapus sumbernya.
Imtheman
1

Anda bisa menggunakan file batch untuk menjalankan Xcopyperintah Anda dengan verifikasi, diikuti oleh pemeriksaan tingkat kesalahan yang dikembalikan oleh Xcopy untuk menentukan apakah file berhasil disalin atau tidak. Jika ya, hapus sumbernya.

Dari dokumentasi Xcopy :

Exit
code  Description
====  ===========
  0   Files were copied without error.
  1   No files were found to copy.
  2   The user pressed CTRL+C to terminate xcopy.
  4   Initialization error occurred. There is not
      enough memory or disk space, or you entered
      an invalid drive name or invalid syntax on
      the command line.
  5   Disk write error occurred.

Batch contoh:

Rem Attempt file copy...
xcopy /D /V %1 %2

Rem Check result code and if it was successful (0), delete the source.
if errorlevel 0 (
    echo Copy completed successfully
    del /Q %1
    exit /B
)

Rem Not Errorlevel 0...
echo Copy failed for some reason.
Ƭᴇcʜιᴇ007
sumber
Apakah errorlevelmasih berfungsi jika saya melakukan dir args && xcopy args >> logfile.txt:? Atau akan errorlevelmenjadi hasil dir?
JBurace
Ini akan berisi hasil dari menjalankan perintah terakhir. Anda dapat mengujinya dengan file kumpulan sederhana seperti: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007
if errorlevel 0SELALU memicu. Karena itu benar-benar memeriksa if errorlevel >= 0sehingga Anda harus memeriksa kasus kesalahan if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Atau, jika Anda lebih suka gaya if not errorlevel 0 (... success case ... )Atau, jika Anda lebih suka gayaif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm
Tentu saja ini akan jauh lebih efisien (perpindahan super murah di hard drive yang sama) ...
Ohad Schneider