xcopy: di chuyển tập tin thay vì sao chép?


11

Tôi muốn sử dụng xcopyđể di chuyển, không sao chép các tệp trên mạng bằng cờ Xác minh. Tôi không thể tìm thấy một công tắc trên xcopy để di chuyển các tập tin, xmovetôi có thể sử dụng công cụ này verifykhông?

Hiện tại tôi đang sử dụng xcopy /D /Vnhưng cần loại bỏ các tệp tại nguồn chỉ khi nó được xác minh, một tệp đã được sao chép thành công đến đích.


1
Bạn nên lưu ý rằng ngay cả việc sử dụng /vkhông đảm bảo rằng một tệp đã được ghi chính xác: bộ đệm đĩa và hệ điều hành có nghĩa là một tệp trong bộ đệm ghi sẽ được lấy từ đó trước khi nó được cam kết thành công. Tùy chọn an toàn duy nhất là tạo một bản sao và lên lịch xác minh và xóa vào thời điểm trong tương lai. Về mặt heurist tôi sẽ nói rằng 5 phút là đủ, nhưng không có quy tắc cứng và nhanh: nó phụ thuộc vào hoạt động của đĩa và kích thước của bộ đệm (tôi nói như một người gặp phải lỗi ghi bộ nhớ cache).
AFH

Câu trả lời:


11

Bạn nên kiểm tra robocopy, nó mạnh hơn nhiều xcopy. Bạn có thể dễ dàng di chuyển các tập tin với /MOVhoặc /MOVE.

Để chỉ di chuyển tệp (xóa khỏi nguồn sau khi sao chép)

robocopy from_folder to_folder files_to_copy /MOV

Để di chuyển tệp và thư mục (xóa khỏi nguồn sau khi sao chép)

robocopy from_folder to_folder files_to_copy /MOVE

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


2
Robocopy không có verifynhiều như tôi có thể thấy.
JBurace

@JBurace Nếu bạn nhìn vào liên kết tôi đã đăng nó /MOVE : Move files and dirs (delete from source after copying). Nếu nó không sao chép, nó sẽ không xóa nguồn.
imtheman

2
Điều gì xảy ra nếu nó được di chuyển, nhưng kích thước tập tin không khớp? Đây là lý do tại sao tôi cần phải làm một verify. Tôi không thấy bất cứ điều gì trong thông tin bản sao rằng nó thực sự xác minh hai tập tin để đảm bảo nó không bị di chuyển mà di chuyển chính xác.
JBurace

@JBurace Tôi không nghĩ nó hoạt động như vậy. Nếu nó không sao chép tất cả các tệp, thì nó sẽ hoạt động như thể không có gì được sao chép cả, và do đó sẽ không xóa nguồn.
imtheman

1

Bạn có thể sử dụng một tệp bó để chạy Xcopylệnh của mình với xác minh, sau đó là kiểm tra mức độ lỗi được Xcopy trả về để xác định xem các tệp có được sao chép thành công hay không. Nếu họ đã làm, xóa nguồn.

Từ tài liệu 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.

Lô ví dụ:

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.

Liệu errorlevelvẫn làm việc nếu tôi đang làm: dir args && xcopy args >> logfile.txt? Hay sẽ errorlevellà kết quả của dir?
JBurace

Nó sẽ chứa kết quả của lần chạy lệnh cuối cùng. Bạn có thể kiểm tra nó với một tệp bó đơn giản như vậy: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007

if errorlevel 0LUÔN LUÔN kích hoạt. Bởi vì nó thực sự đang kiểm tra if errorlevel >= 0vì vậy bạn nên kiểm tra trường hợp lỗi if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Hoặc, nếu bạn thích phong cách if not errorlevel 0 (... success case ... )Hoặc, nếu bạn thích phong cách nàyif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm

Tất nhiên điều này sẽ kém hiệu quả hơn nhiều (di chuyển là siêu rẻ trong cùng một ổ cứng) ...
Ohad Schneider
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.