xcopy: dosyalar kopya yerine taşınsın mı?


11

xcopyVerify bayrağıyla dosyaları ağ üzerinde kopyalamak için değil taşımak için kullanmak istiyorum . Dosyaları taşımak için xcopy üzerinde bir anahtar bulamadım xmove, kullanabileceğim bir var verifymı?

Şu anda kullanıyorum xcopy /D /Vama sadece bir dosya başarıyla hedefe kopyalanmış doğrulandığında kaynak dosyadan kurtulmak gerekiyor .


1
Kullanmanın bile /vbir dosyanın doğru yazıldığını garanti etmediğini bilmeniz gerekir : disk ve OS önbellekleri, yazma önbelleğindeki bir dosyanın başarıyla işlenmeden önce oradan alınacağı anlamına gelir. Tek güvenli seçenek, bir kopyasını yapmak ve gelecekteki bir zamanda bir doğrulama ve silme zamanlamaktır. Sezgisel olarak 5 dakikanın yeterli olacağını söyleyebilirim, ancak zor ve hızlı bir kural yoktur: disk etkinliğine ve önbelleklerin boyutuna bağlıdır (önbellek yazma hatalarıyla karşılaşan biri olarak konuşurum).
AFH

Yanıtlar:


11

Kontrol etmelisin robocopy, çok daha güçlü xcopy. Kolayca ile dosya taşıyabilirsiniz /MOVveya /MOVE.

Yalnızca dosyaları taşımak için (kopyaladıktan sonra kaynaktan silin)

robocopy from_folder to_folder files_to_copy /MOV

Dosyaları ve dizinleri taşımak için (kopyaladıktan sonra kaynaktan silin)

robocopy from_folder to_folder files_to_copy /MOVE

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


2
Robokopinin verifygörebildiğim kadarını yok .
JBurace

Bağlantıya bakarsak @JBurace Ben devletler yayınlanmıştır: /MOVE : Move files and dirs (delete from source after copying). Kopyalanmazsa, kaynağı kaldırmaz.
imtheman

2
Taşınır, ancak dosya boyutu eşleşmezse ne olur? Bu yüzden yapmam gerek verify. Robocopy bilgisinde, sadece taşınmakla kalmayıp doğru şekilde taşınmasını sağlamak için iki dosya boyutunu doğruladığı hiçbir şey görmüyorum.
JBurace

@JBurace Böyle çalıştığını sanmıyorum. Tüm dosyayı kopyalamazsa, hiçbir şey kopyalanmamış gibi davranır ve bu nedenle kaynağı kaldırmaz.
imtheman

1

XcopyKomutunuzu doğrulama ile çalıştırmak için bir toplu iş dosyası kullanabilir ve ardından dosyaların başarıyla kopyalanıp kopyalanmadığını belirlemek için Xcopy tarafından döndürülen hata düzeyini kontrol edebilirsiniz. Eğer öyleyse, kaynağı silin.

Gönderen Xcopy belgelerinde :

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.

Örnek parti:

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.

Yaparsam errorlevelhala çalışır mı dir args && xcopy args >> logfile.txt? Yoksa errorlevelbir sonucu dirmu olacak ?
JBurace

Son komut çalıştırmasının sonucunu içerecektir. Basit bir toplu iş dosyasıyla test edebilirsiniz: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007

if errorlevel 0DAİMA tetikler. Gerçekten kontrol ediyor, if errorlevel >= 0bu yüzden hata durumunu kontrol etmelisiniz if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Veya, stili tercih ediyorsanız Veya, stili tercih if not errorlevel 0 (... success case ... )ediyorsanızif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm

Tabii ki bu çok daha az verimli olurdu (hareket aynı sabit diskte süper ucuzdur) ...
Ohad Schneider
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.