xcopy: перемістити файли замість копії?


11

Я хотів би використовувати xcopyдля переміщення, а не копіювання файлів по мережі з прапором Підтвердити. Я не зміг знайти перемикач на xcopy для переміщення файлів, чи xmoveможна це використовувати verify?

На даний момент я використовую, xcopy /D /Vале потрібно позбутися файлів у джерелі лише тоді, коли він перевірений, файл був успішно скопійований до місця призначення.


1
Ви повинні пам’ятати, що навіть використання /vне гарантує правильного запису файлу: кеш диска та ОС означає, що файл у кеші запису буде отриманий звідти, перш ніж він був успішно скоєний. Єдиний безпечний варіант - зробити копію і запланувати перевірку та видалити в майбутньому. Евристично я б сказав, що 5 хвилин вистачило б, але немає жорсткого і швидкого правила: це залежить від активності диска та розміру кеш-пам'яті (я говорю як той, хто зіткнувся з помилками кешованого запису).
AFH

Відповіді:


11

Ви повинні перевірити robocopy, це набагато потужніше, ніж xcopy. Ви можете легко переміщувати файли за допомогою /MOVабо /MOVE.

Переміщення файлів (видалення з джерела після копіювання)

robocopy from_folder to_folder files_to_copy /MOV

Переміщення файлів і каталогів (видалення з джерела після копіювання)

robocopy from_folder to_folder files_to_copy /MOVE

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


2
Робокопія не має verify, наскільки я бачу.
JBurace

@JBurace Якщо подивитися по посиланню я розмістив в ньому йдеться: /MOVE : Move files and dirs (delete from source after copying). Якщо він не копіює, джерело не видалить.
imtheman

2
Що станеться, якщо він переміститься, але розмір файлів не збігається? Ось чому мені потрібно зробити verify. Я не бачу нічого в інформації про роботокопію, щоб вона фактично перевіряла два розміри файлів, щоб переконатися, що вона не просто переміщена, а переміщена правильно.
JBurace

@JBurace Я не думаю, що це працює так. Якщо він не скопіює весь файл, то він буде діяти так, ніби взагалі нічого не скопіюється, і тому не видалить джерело.
imtheman

1

Ви можете використовувати пакетний файл для запуску Xcopyкоманди з підтвердженням, після чого слід перевірити рівень помилки, повернутий Xcopy, щоб визначити, успішно скопійовані файли чи ні. Якщо так, видаліть джерело.

З документації 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.

Приклад партії:

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.

Чи errorlevelвсе ще працює, якщо я роблю dir args && xcopy args >> logfile.txt:? Або буде errorlevelрезультатом dir?
JBurace

Він буде містити результат останнього запуску команди. Ви можете протестувати його за допомогою простого пакетного файлу: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007

if errorlevel 0ВЖЕ спрацьовує. Оскільки це дійсно перевірка, if errorlevel >= 0то слід замість цього перевірити випадок помилки if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Або, якщо ви віддаєте перевагу стилю. if not errorlevel 0 (... success case ... )Або, якщо ви віддаєте перевагу стилюif %ERRORLEVEL% EQU 0 ( ... success case ... )
Джессі Чісгольм

Звичайно, це було б набагато менш ефективно (рухатися дуже дешево на тому ж жорсткому диску) ...
Охад Шнайдер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.