Se pueden hacer copias de seguridad incrementales en Windows desde línea de comandos sin necesidad de instalar ningún programa adicional con el viejo comando de MS-DOS xcopy.
Para que xcopy solo copie los ficheros modificados desde la última copia, debemos indicarle varios parámetros, con lo que la orden quedaría así:
xcopy "c:\origen\*.*" "c:\destino\*.*" /d/e/y/c/i/h/f/r/k > log.txt 2>&1
El significado de los parámetros es este:
- /d: Copia archivos cambiados durante o después de la fecha indicada. Si no se da ninguna fecha, copia sólo aquellos archivos cuya fecha de modificación en el origen es más nueva que la fecha de modificación en el destino.
- /e: Copia directorios y subdirectorios, incluyendo los vacíos.
- /y: Suprime la pregunta de confirmación para sobrescribir un archivo de destino existente.
- /c: Continua copiando incluso si ocurren errores (como que el archivo a copiar este en uso, con lo que dará un error de acceso denegado y no lo copiará).
- /i: Si el destino no existe y hay que copiar más de un archivo, se asume que el destino debe ser un directorio.
- /h: Copia también archivos ocultos y archivos de sistema.
- /f: Muestra los nombres completos de los archivos de origen y destino mientras se copia
- /r: Sobrescribe archivos de solo lectura
- /k: Copia atributos
- > log.txt: obtendremos un fichero log.txt (o el nombre que queramos indicarle) con un listado de los ficheros que se han copiado. Si omitimos esta ultima parte, el listado de ficheros copiados aparecerá en una pantalla de linea de comandos que se cerrará automáticamente al terminar la copia.
- 2>&1: incluirá en el fichero log.txt los errores que vayan surgiendo al copiar los archivos. Si no lo incluimos, en el log solo se verán los ficheros copiados pero no los errores, que saldrían solo por pantalla, en cuyo caso el log no sería fiable ya que si no estamos delante de la pantalla durante la copia no veriamos ningún error y pensariamos que la copia se ha realizado correctamente cuando puede no ser así.
Algunos de estos parametros solo están disponibles en la línea de comandos de Windows, pero no en MS-DOS.
Podemos incluir el comando en un fichero por lotes bat y añadirlo a una tarea programada para que se ejecute periódicamente de manera automática.
Puedes consultar la documentación completa del comando xcopy (en inglés) en la web de Microsoft.
Este comando es válido para todas las versiones de Windows, aunque si usas Vista o Windows 7 puede resultarte más útil robocopy.
Para copias de seguridad en Linux tenemos el comando rsync.
Ricardo dice
Hola, cuando copio un archivo .RAR por primera vez a un destino, ubicación de red, con Xcopy (utilizo un .bat) me pregunta: ¿Z:\BACKUPS\BK_ALMAGRO.rar especifica un archivo o un directorio como destino (F = archivo, D = directorio)?.
Selecciono F para que me lo copie como archivo.
La pregunta es si existe algún comando para que copie al destino siempre como archivo en vez de estar preguntándome cada vez que copia por primera vez.
Espero haber sido claro. Gracias y saludos.
Ricardo.
Igor García dice
¿Puedes poner el comando exacto que estás utilizando?
josemego dice
un sencillo ejemplo , hace la copia de seguridad manteniendo siete copias y borrando la mas antigua , un saludo
@echo off
xcopy T:\origen t:\copia_seguridad\copia\ /e/i/y
if exist t:\copia_seguridad\copia7 rd /s/q T:\copia_seguridad\copia7
if exist t:\copia_seguridad\copia6 rename t:\copia_seguridad\copia6 copia7
if exist t:\copia_seguridad\copia5 rename t:\copia_seguridad\copia5 copia6
if exist t:\copia_seguridad\copia4 rename t:\copia_seguridad\copia4 copia5
if exist t:\copia_seguridad\copia3 rename t:\copia_seguridad\copia3 copia4
if exist t:\copia_seguridad\copia2 rename t:\copia_seguridad\copia2 copia3
if exist t:\copia_seguridad\copia1 rename t:\copia_seguridad\copia1 copia2
if exist t:\copia_seguridad\copia rename t:\copia_seguridad\copia copia1
Igor García dice
Muy interesante.
Gracias por el aporte.
Richard Hernandez dice
saludos necesito crear mi archivo de log despues que corre mi .bat. Necesito ayuda si quieren me pueden enviar su mail para yo enviarle mi .bat para que me lo configuren
Sergio dice
Hola Igor, muy buen post, he intentado utilizar el comando pero al copiar unos 50 archivos se termina la copia. en el log me indica memoria insuficiente. que puede ser? uso win xp sp3.
Igor dice
Ese error suele salir si tienes muchas subcarpetas y las rutas absolutas sean muy largas o el propio nombre de un fichero es muy largo (creo que 256 caracteres).
Comprueba a partir de que fichero te da el error.
MARTA ANTÓN dice
Hola Igor,
Estoy intentando hacer la copia como muestras en los ejemplos pero me sale primero c:> y no se como salir de c: para poder hacer la copia.
Hay que dejar algún espacio en las instrucciones o se pone todo seguido?
Mil gracias por tu ayuda.
Saludos
javier dice
muy buenas tardes estoy creando un bat con xcopy para hacer un back up de lo que tengo en la carpeta de mis documentos todo esta bien cuando el bat lo ejecuto manualmente y me genera los archivos de texto con lo que copio pero cuando lo ejecuto con una tarea programada no me genera el archivo de texto con el resumen de la informacion que copie me podrian ayudar sistema operativo windows 7
Igor dice
Seguramente sea problema de permisos.
Prueba a ir a las propiedades de la tarea y cambia el usuario que la ejecuta.
Otra opción sería cambiar en el bat la ruta en la que guardas el log por una con permisos para todos los usuarios, poniendo por ejemplo > c:log.txt
Si sigue dando problemas crea la tarea de nuevo pero desde la opción de crear tarea básica.
Ya nos comentas si funciona.
Un saludo.
Adolfo dice
Simple, conciso y clarísimo.
No se puede hacer mejor...
Muchas gracias por tu aportación.
Igor dice
Yuleny comprueba que tengas cerrada la ventana de la tarjeta, ya en ese caso usará el autorun y estando en uso no lo copiará. Prueba también a ejecutar el símbolo de sistema como administrador (inicio, buscar simbolo de sistema, clic derecho, ejecutar como administrador) a ver si te deja. De todas maneras si solo es ese archivo prueba a copiarlo manualmente
Yuleny dice
Hola me funciona perfecto el xcopy pero dentro de lo que quiero copiar esta un archivo autorun.inf y con ese archivo me da acceso denegado, estoy sacando respaldo de una tarjeta SD para pasarla a otra SD. Por favor me ayudas...?
ecastillo dice
Hola Igor Es muy buena la explicacion de los comandos para hacer copias de seguridad completa e incremental, probe estos comandos y funcionan muy. que tal si agregas los comandos para comprimir la copia, algo como la compresion de archivos en zip o rat, esto optimiza el espacio en discos de respaldo
Igor dice
Mauricio, es muy fácil, solo tienes que escribir el comando en el bloc de notas y al guardarlo seleccionar la opción todos los archivos, y ponerle un nombre terminado en .bat (con el punto) y ya tendrás un archivo que al hacer doble clic hará el xcopy.
Mauricio dice
Quiciera saber como hacer para poner el xcopy en un icono desde la pantalla, hago el icono pero solollego hasta msdos, no se como poner los comandos correctos en el icono "iniciar en" Mil gracias
clara dice
ola igor tengo que hacer una copia de seguridad en cobian backup de unos trabajos y meterlos en una carpeta SEGU y e probado de mil formas y nada que pongo en origen y en destino para poder hacerlo que no se que probar ya
Igor dice
Me alegro de que te haya servido.
Un saludo Mónica.
Mónica dice
Igor, por fin!!! ya lo he conseguido. Tu explicación clara, debo leer con más atención. gracias!!!!
Mónica dice
Hola de nuevo Igor, lo he hecho con el cobian backup pero necesito con los comandos de ms-dos. Hago lo que me dices pero no me sale. o no reconoce carácteres o extensiones o no me copia nada. creo carpetas y su ficheros. le meto el xcopy origen destino /D:fecha y nada. también lo he escrito 1º en el bloc y luego con los comandos como dices y nada.no sé qué hago mal.
Mónica dice
Gracias Igor, a ver si ahora me sale.
Igor dice
Mónica, solo tienes que seguir las instrucciones de arriba, pegar el comando en el bloc de notas y guardarlo como tipo bat. Luego solo tienes que ir a panel de control, tareas programadas y añadir una nueva tarea, indicando el fichero que acabas de crear y cuando quieres que se ejecute.