xcopy: mover archivos en lugar de copiar?

11

Me gustaría usar xcopypara mover, no copiar archivos a través de una red con el indicador Verificar. No pude encontrar un interruptor en xcopy para mover archivos, ¿hay alguno xmoveque pueda usar que tenga verify?

En este momento estoy usando, xcopy /D /Vpero necesito deshacerme de los archivos en la fuente solo cuando se verifica que un archivo se copió con éxito en el destino.

JBurace
fuente
1
Debe tener en cuenta que incluso el uso /vno garantiza que un archivo se haya escrito correctamente: las memorias caché de disco y sistema operativo significan que un archivo en una memoria caché de escritura se recuperará desde allí antes de que se haya confirmado correctamente. La única opción segura es hacer una copia y programar una verificación y eliminación en el futuro. Heurísticamente, diría que 5 minutos serían suficientes, pero no existe una regla estricta y rápida: depende de la actividad del disco y del tamaño de los cachés (hablo como alguien que ha encontrado fallas de escritura en caché).
AFH

Respuestas:

11

Deberías echarle un vistazo robocopy, es mucho más poderoso que xcopy. Puede mover archivos fácilmente con /MOVo /MOVE.

Para mover archivos solamente (eliminar de la fuente después de copiar)

robocopy from_folder to_folder files_to_copy /MOV

Para mover archivos y directorios (eliminar de la fuente después de copiar)

robocopy from_folder to_folder files_to_copy /MOVE

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

soy el hombre
fuente
2
Robocopy no tiene un verifypor lo que puedo ver.
JBurace
@JBurace Si nos fijamos en el enlace que he publicado se indica: /MOVE : Move files and dirs (delete from source after copying). Si no copia, no eliminará la fuente.
imtheman
2
¿Qué sucede si se mueve, pero el tamaño del archivo no coincide? Es por eso que necesito hacer un verify. No veo nada en la información de robocopy que realmente verifique los dos tamaños de archivo para garantizar que no solo se movió sino que se movió correctamente.
JBurace
@JBurace No creo que funcione así. Si no copia todo el archivo, actuará como si nada se hubiera copiado y, por lo tanto, no eliminará la fuente.
imtheman
1

Puede usar un archivo por lotes para ejecutar su Xcopycomando con la verificación, seguido de una verificación del nivel de error devuelto por Xcopy para determinar si los archivos se copiaron correctamente o no. Si lo hicieron, elimine la fuente.

De la documentación de 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.

Ejemplo de lote:

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
fuente
¿ errorlevelTodavía funciona si estoy haciendo dir args && xcopy args >> logfile.txt:? O será el errorlevelresultado de dir?
JBurace
Contendrá el resultado de la última ejecución del comando. Puede probarlo con un simple archivo por lotes como tal: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007
if errorlevel 0SIEMPRE disparadores. Debido a que realmente está comprobando if errorlevel >= 0, debería verificar el caso de error if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). O, si prefiere el estilo if not errorlevel 0 (... success case ... )O, si prefiere el estiloif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm
Por supuesto, esto sería mucho menos eficiente (el movimiento es súper barato en el mismo disco duro) ...
Ohad Schneider