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). Если он не копирует, он не удалит источник.
Имтеман

2
Что произойдет, если он будет перемещен, но размер файла не совпадает? Вот почему мне нужно сделать verify. В информации о robocopy я не вижу ничего, что на самом деле проверяет два размера файлов, чтобы убедиться, что они не просто перемещены, а перемещены правильно.
JBurace

@JBurace Я не думаю, что это так работает. Если он не скопирует весь файл, он будет действовать так, как будто ничего не скопировано, и, следовательно, не удалит источник.
Имфеман

1

Вы можете использовать командный файл для запуска Xcopyкоманды с помощью команды verify, а затем проверить уровень ошибок, возвращаемый 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 ... )
Джесси Чисхолм

Конечно, это было бы намного менее эффективно (движение очень дешево на том же жестком диске) ...
Ohad Schneider
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.