xcopy: przenosić pliki zamiast kopiować?

11

Chciałbym użyć xcopydo przenoszenia, a nie kopiowania plików w sieci z flagą Verify. Nie mogłem znaleźć przełącznika na Xcopy do przenoszenia plików, czy xmovemogę go użyć verify?

W tej chwili używam, xcopy /D /Vale muszę pozbyć się plików u źródła tylko po zweryfikowaniu, że plik został pomyślnie skopiowany do miejsca docelowego.

JBurace
źródło
1
Należy pamiętać, że nawet użycie /vnie gwarantuje, że plik został poprawnie zapisany: pamięć podręczna dysku i systemu operacyjnego oznacza, że ​​plik w pamięci podręcznej zapisu zostanie pobrany z niego przed pomyślnym zatwierdzeniem. Jedyną bezpieczną opcją jest wykonanie kopii i zaplanowanie weryfikacji i usunięcia w przyszłości. Heurystycznie powiedziałbym, że wystarczy 5 minut, ale nie ma twardej i szybkiej reguły: zależy to od aktywności dysku i wielkości pamięci podręcznej (mówię jako ten, który napotkał błędy zapisu w pamięci podręcznej).
AFH

Odpowiedzi:

11

Powinieneś się robocopyprzekonać, jest o wiele potężniejszy niż xcopy. Możesz łatwo przenosić pliki za pomocą /MOVlub /MOVE.

Aby przenieść tylko pliki (usuń ze źródła po skopiowaniu)

robocopy from_folder to_folder files_to_copy /MOV

Aby przenieść pliki i katalogi (usuń ze źródła po skopiowaniu)

robocopy from_folder to_folder files_to_copy /MOVE

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

jestem mężczyzną
źródło
2
Robocopy nie ma verifytak daleko, jak widzę.
JBurace
@JBurace Jeśli spojrzeć na link zamieściłem stwierdza: /MOVE : Move files and dirs (delete from source after copying). Jeśli się nie skopiuje, nie usunie źródła.
imtheman
2
Co się stanie, jeśli zostanie przeniesiony, ale rozmiar pliku nie pasuje? Dlatego muszę to zrobić verify. Nie widzę nic w informacjach o robocopy, które faktycznie weryfikują dwa rozmiary plików, aby upewnić się, że nie tylko zostały przeniesione, ale zostały poprawnie przeniesione.
JBurace
@JBurace Nie sądzę, że tak to działa. Jeśli nie skopiuje całego pliku, będzie działał tak, jakby nic nie zostało skopiowane, a zatem nie usunie źródła.
imtheman
1

Możesz użyć pliku wsadowego, aby uruchomić Xcopypolecenie z weryfikacją, a następnie sprawdzić poziom błędu zwrócony przez Xcopy, aby ustalić, czy pliki zostały pomyślnie skopiowane, czy nie. Jeśli tak, usuń źródło.

Z dokumentacji 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.

Przykładowa partia:

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
źródło
Czy errorlevelnadal działać, jeśli robię: dir args && xcopy args >> logfile.txt? Czy będzie errorlevelwynikiem dir?
JBurace
Będzie zawierać wynik ostatniego uruchomienia polecenia. Możesz to przetestować za pomocą prostego pliku wsadowego jako takiego: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007
if errorlevel 0ZAWSZE uruchamia się. Ponieważ tak naprawdę sprawdza if errorlevel >= 0, powinieneś zamiast tego sprawdzić przypadek błędu if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Lub, jeśli wolisz styl if not errorlevel 0 (... success case ... )Lub, jeśli wolisz stylif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm
Oczywiście byłoby to znacznie mniej wydajne (ruch jest bardzo tani na tym samym dysku twardym) ...
Ohad Schneider