Me gustaría usar xcopy
para 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 xmove
que pueda usar que tenga verify
?
En este momento estoy usando, xcopy /D /V
pero necesito deshacerme de los archivos en la fuente solo cuando se verifica que un archivo se copió con éxito en el destino.
/v
no 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é).Respuestas:
Deberías echarle un vistazo
robocopy
, es mucho más poderoso quexcopy
. Puede mover archivos fácilmente con/MOV
o/MOVE
.Para mover archivos solamente (eliminar de la fuente después de copiar)
Para mover archivos y directorios (eliminar de la fuente después de copiar)
http://ss64.com/nt/robocopy.html
fuente
verify
por lo que puedo ver./MOVE : Move files and dirs (delete from source after copying)
. Si no copia, no eliminará la fuente.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.Puede usar un archivo por lotes para ejecutar su
Xcopy
comando 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 :
Ejemplo de lote:
fuente
errorlevel
Todavía funciona si estoy haciendodir args && xcopy args >> logfile.txt
:? O será elerrorlevel
resultado dedir
?if errorlevel 0
SIEMPRE disparadores. Debido a que realmente está comprobandoif errorlevel >= 0
, debería verificar el caso de errorif errorlevel 1 ( ... failure case ... ) else ( ... success case ... )
. O, si prefiere el estiloif not errorlevel 0 (... success case ... )
O, si prefiere el estiloif %ERRORLEVEL% EQU 0 ( ... success case ... )