La Guía Definitiva para Copiar Archivos y Carpetas Usando Xcopy

La herramienta Xcopy, que significa copia extendida, es una utilidad popular de línea de comandos para copiar grandes cantidades de datos en Windows. En comparación con el comando tradicional copy, Xcopy tiene más características y opciones que te brindan un mejor control al copiar o mover archivos y carpetas.

En esta guía, aprenderás cómo usar Xcopy para varios escenarios de copia de archivos. Desde copiar un solo archivo, múltiples directorios, aplicar filtros o exclusiones, y más. Al final, habrás adquirido el conocimiento para utilizar Xcopy en tus tareas diarias de copia de archivos.

¡Comencemos!

Prerrequisitos

Para seguir los ejemplos en esta guía, necesitarás lo siguiente.

  • A Windows (server or client) computer. Xcopy comes built-in to Windows, and you don’t need to download anything else. This guide will use Windows 10 Build 1909.
  • Xcopy funciona en el símbolo del sistema o PowerShell, y este artículo asume que ya tienes uno abierto.

Entendiendo el comando Xcopy

Xcopy es una utilidad de línea de comandos que ha estado disponible por defecto desde Windows 98. Puedes encontrar esta herramienta en la carpeta %WINDIR%\system32 con el nombre ejecutable xcopy.exe.

En comparación con el comando copy de Windows, Xcopy es mucho más eficiente en la copia de archivos y directorios. Además, Xcopy tiene más opciones que lo hacen más personalizable y te permiten controlar el comportamiento de copia de archivos.

Beneficios

Hay varios beneficios o ventajas de usar Xcopy que aprenderás a medida que avances en esta guía. Pero a continuación se presentan algunos de los beneficios de usar Xcopy.

  • Operación de copia más rápida en grandes conjuntos de archivos y directorios.
  • Simplifica el despliegue de aplicaciones.
  • Puede replicar la estructura del directorio fuente tal como está.
  • Copia archivos manteniendo el propietario y la información de la lista de control de acceso (ACL).
  • Copia y sobrescribe archivos de solo lectura.
  • Puede excluir archivos según el nombre del archivo, la extensión o la ruta.
  • Puede identificar archivos actualizados, lo cual es útil para copias de seguridad diferenciales.
  • Integra y utiliza con scripts.

Limitaciones

Por maravilloso que sea Xcopy, no está exento de limitaciones. Aunque estas limitaciones pueden no ser un obstáculo insuperable, sería bueno saber cuáles son antes de profundizar.

  • No puede copiar archivos abiertos.
  • No hay soporte para el Servicio de Copia de Volumen en Sombra de Windows (VSS). Esta falta de soporte de VSS hace que Xcopy no sea adecuado para hacer copias de seguridad de volúmenes del sistema operativo en vivo.
  • Error de memoria insuficiente cuando la longitud de la ruta más el nombre de archivo supera los 254 caracteres.

Xcopy Referencia de sintaxis

Xcopy te permite realizar diversas operaciones de copia de archivos y carpetas. Pero primero, necesitarás entender su sintaxis y opciones. Hay muchas opciones que cambiarían cómo Xcopy opera. Para ayudarte a entender estas opciones, las tablas que siguen las cubrirán en detalle.

La primera designación de ruta se refiere al archivo o archivos de origen; la segunda designación de ruta se refiere al archivo o archivos de destino.

xcopy [source] [destination] [options]
  • [fuente] – Nombre de la ruta para el o los archivos a copiar (acepta caracteres comodín). Deberías especificar la unidad, la ruta y los archivos que deseas copiar.
  • [destino] – Nombre de la ruta para el o los archivos nuevos. Si no especificas la ruta de destino, el comando copiará los archivos en la misma ruta que la fuente.
  • [opciones] – Puede ser cualquiera de las siguientes opciones en las tablas a continuación. También puedes ver estas opciones ejecutando el comando xcopy /? o visitando la documentación en línea de Xcopy.

Opciones de origen

Switch Explanation
/A Copy files that have the archive attribute.
/M Copy files with the archive attribute set, then switches off the archive attribute at the destination. Use this option when creating routine backups.
/H Copy hidden and system files and directories. The default value is N.
/D:mm-dd-yyyy Only copies that files with modification date on or after the given date. Without using this option, the command will copy only the files whose date/time is newer than the destination.
/U Only copies the files that already exists at the destination.
/S Copies folders and subfolders recursively excluding the empty one.
/E Copies folders and subfolders recursively including the empty one.
/EXCLUDE:file1[+file2][+file3]… Specify the text file(s) containing a list of strings to match absolute file paths to exclude.

Opciones de destino

Switch Explanation
/I If the destination does not exist, using this option assumes that the destination is a directory and creates it. If you omit this option, the command prompts to confirm if the destination is a directory or a file.
/R Overwrites read-only files.
/T Creates a recursive folder structure at the destination without copying the files. This option does not include copying empty folders. To include empty folders, use this option together with the /E option.
/K Preserves the file attributes during the copy. Otherwise, the command will reset read-only attributes.
/N Copies files using their short file names.
/O Copies files including ownership and access control list (ACL) information.
/X Copies files including file audit settings and ACL information (implies using /O).

Opciones de copia

Switch Explanation
/W Prompts for a key press before the copy process can start.
/P Prompts (Y/N) before creating each file.
/Y Suppresses the confirmation to overwrite destination file if exists.
/-Y Prompts to confirm overwriting an existing destination file.
/V Verifies that the source and destination file sizes are identical.
/C Ignores errors and forces the command to continue copying.
/B Copies only the symbolic link but not the link target file.
/G Copies encrypted files to a destination that does not support encryption.
/J Copies files without using the buffer. This switch useful when copying very large files.
/Q Suppresses the display of file names while copying.
/F Displays the full source and destination file paths while copying.
/L Only displays which files to copy without copying them. This switch can be useful when testing Xcopy commands with multiple options to assess the expected result.
/Z Copies files in restartable mode. Using this option, the command gracefully stops copying files during network interruption. The copying will resume after re-estabslishing the network connection.

Trabajando con Xcopy: Ejemplos de uso

Ahora que estás familiarizado con la sintaxis y opciones de Xcopy, es hora de comenzar a usarlo realmente combinando una o más opciones juntas. Explorarás muchos escenarios diferentes en las siguientes secciones para usar Xcopy y copiar archivos y carpetas.

Enumeración de archivos a copiar

Si tienes un servidor de archivos que contiene una gran cantidad de archivos que deseas copiar, tal vez a una ubicación de respaldo, sería ideal probar primero tu comando Xcopy. Una situación en la que querrías probar Xcopy es cuando estás combinando múltiples opciones de Xcopy.

Usando el interruptor /L con Xcopy, puedes simular lo que hubiera sucedido al emitir el comando enumerando qué archivos copiaría. De esta manera, puedes confirmar si tu comando copiará todos los archivos que tenías previsto.

XCOPY C:\Workarea\XCopyDemo C:\Workarea\XCopyDemoFolder /L

Copiando un Solo Archivo

La operación más básica que puedes realizar con Xcopy es copiar un archivo desde una fuente hasta un destino sin utilizar ninguna opción. Por ejemplo, el comando a continuación copiará un archivo de texto a un directorio de destino, y el nombre del archivo será el mismo.

XCOPY C:\Workarea\XCopyDemo\NewFile.txt C:\Workarea\XCopyDemoFolder

También puedes copiar el archivo de origen y cambiar el nombre de destino del archivo ejecutando el siguiente comando.

XCOPY C:\Workarea\XCopyDemo\NewFile.txt C:\Workarea\XCopyDemoFolder\AnotherFile.txt

Copiando Archivos a una Nueva Carpeta

Con Xcopy, puedes copiar archivos y crear el directorio de destino sobre la marcha. Para hacerlo, debes agregar la opción /I al comando Xcopy.

Por ejemplo, el comando a continuación copia los archivos desde la carpeta C:\Workarea\Demo hasta la carpeta D:\Workarea. Si la carpeta de destino no existe, Xcopy crea la carpeta de destino utilizando la opción /I.

XCOPY C:\Workarea\Demo D:\Workarea /I

Copiando Todos los Archivos y Carpetas de Forma Recursiva

Además de copiar archivos de una carpeta a otra, Xcopy también te permite copiar carpetas y archivos de manera recursiva. Y hay dos formas de hacer una copia recursiva, con y sin carpetas vacías.

Para copiar todos los archivos y directorios, ignorando los directorios vacíos, agrega la opción /S al final del comando Xcopy, como se muestra a continuación.

XCOPY C: D: /S

Por otro lado, para incluir directorios vacíos durante la copia recursiva, agrega en su lugar la opción /E al comando.

XCOPY C: D: /E

Incluyendo Archivos Ocultos y de Sistema

De forma predeterminada, Xcopy no incluye archivos ocultos y de sistema en las operaciones de copia. Pero si necesitas forzar a Xcopy a incluir estos archivos, agrega el interruptor /H al comando.

El siguiente comando copia todos los archivos de forma recursiva, incluyendo archivos ocultos y de sistema. Este comando también ignora errores, crea las carpetas de destino y sobrescribe los archivos existentes.

XCOPY C:\Workarea\Documents D:\Workarea\Documents /S /H /C /Y

Preservando el Atributo de Solo Lectura del Archivo

Otro atributo que Xcopy puede manejar y preservar es el atributo de solo lectura del archivo. De forma predeterminada, cuando Xcopy copia un archivo de solo lectura, elimina este atributo en el destino. Para evitar que Xcopy elimine el atributo de solo lectura, agrega el interruptor /K al comando.

Por ejemplo, el siguiente comando copia un archivo de solo lectura a otra ubicación, y el archivo resultante en el destino seguirá teniendo el atributo de solo lectura. Este comando también sobrescribirá el archivo de destino si ya existe.

XCOPY C:\Workarea\XCopyDemo\NewFile.txt D:\Workarea /I /K /Y

Como efecto secundario de preservar el archivo como de solo lectura, Xcopy no puede sobrescribir el mismo archivo en futuras operaciones de copia. Sin embargo, puedes forzar a Xcopy a sobrescribir archivos de solo lectura agregando el interruptor /R.

XCOPY C:\Workarea\XCopyDemo\NewFile.txt D:\Workarea /K /R /Y

Filtrar Archivos para Copiar

Supongamos que hay varios archivos en la carpeta de origen y subcarpetas que deseas copiar. Xcopy te permite ingresar comodines como una forma de filtrar qué archivos copiar.

Por ejemplo, el siguiente comando copia solo los archivos con la extensión .cs de forma recursiva desde la raíz de la unidad C: a la raíz de la unidad E:. Este comando también ignora errores y sobrescribe archivos existentes sin solicitar confirmación.

XCOPY C:\*.cs E:\ /S /C /Y

Excluir archivos y carpetas de la copia

A powerful feature of Xcopy is its ability to exclude files from the copy process. To use this feature, you can leverage the /EXCLUDE switch. This switch accepts the names of the file(s) that contain the exclusion lists.

Primero, necesitas crear o tener un archivo que contenga la lista de exclusión. Por ejemplo, puedes tener un archivo de texto llamado Exclude.txt que contiene las siguientes entradas. Como puedes ver, el archivo de exclusión puede tener nombres de archivos específicos, extensiones de archivo y carpetas como entradas.

xyz.txt
Exclude.txt
.pdf
.png
\exclude\

Para ejecutar Xcopy con exclusiones, ejecuta el siguiente comando y especifica la ruta completa del archivo de exclusión en el interruptor /EXCLUDE. Este comando utiliza el archivo C:\Workarea\XCopyDemo\Exclude.txt.

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /S /Y /Exclude:C:\Workarea\XCopyDemo\Exclude.txt

¿El resultado? Xcopy se ejecuta para copiar archivos, pero omite los archivos xyz.txt, Exclude.txt, todos los archivos con las extensiones .pdf y .png, y todos los archivos dentro del directorio exclude.

Realizando una copia diferencial

Cuando necesitas hacer una copia de seguridad de archivos desde una ubicación a otra, Xcopy tiene una opción que te permite realizar una copia diferencial. En lugar de copiar todos los archivos, una copia diferencial solo copia los archivos cuya fecha de modificación coincide o es posterior a una fecha que especificas en el interruptor /D:m-d-y.

Por ejemplo, para copiar solo los archivos con la fecha de modificación del 01 de abril de 2021 en adelante, ejecuta el siguiente comando. Además, este comando realiza una copia recursiva, ignora los errores y sobrescribe los archivos existentes en el destino.

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /D:04-01-2021 /S /C /Y

Si no especificas una fecha con la opción /D, Xcopy copiará solo los archivos de origen que sean más recientes que los archivos de destino.

Copiando archivos basados en el atributo de archivo de respaldo

Normalmente, los programas de respaldo eliminan el atributo de archivo de un archivo después de una operación de respaldo. Después de modificar un archivo (es decir, editarlo y guardarlo), Windows restablece automáticamente el atributo de archivo de los archivos.

Si creas un script para hacer copias de seguridad de archivos usando Xcopy, puedes utilizar el atributo de archivo para determinar si copiar o hacer una copia de seguridad del archivo.

Para copiar archivos con el atributo de archivo, puedes aprovechar los interruptores /A y /M. Cuál de estos interruptores usar depende de si deseas conservar o no el atributo de archivo del archivo.

El siguiente comando realiza una copia recursiva de archivos solo con el atributo de archivo. Los archivos de destino retendrán el atributo de archivo después de la copia debido al interruptor /A.

XCOPY C:\Workarea\Demo D:\Workarea\Test /A /S /Y

Por el contrario, para eliminar el atributo de archivo del archivo de origen después de copiarlo al destino, especifica el interruptor /M en su lugar.

XCOPY C:\Workarea\Demo D:\Workarea\Test /M /S /Y

Conservación de la información del propietario del archivo y de la ACL.

Imagina crear una copia de seguridad de toda una carpeta de perfil. Cada archivo puede tener diferentes propietarios o permisos únicos. Si necesitas restaurar esos archivos, querrías que los mismos propietarios y permisos estén intactos.

De esta manera, todo el proceso parecería fluido y los usuarios seguirán teniendo el mismo acceso a los archivos que tenían antes. Pero primero, debes asegurarte de estar haciendo una copia de seguridad de esos archivos manteniendo los propietarios y el acceso existentes.

Para copiar archivos y retener la información del propietario y ACL, añade el parámetro /O al comando xcopy, como se muestra a continuación.

XCOPY C:\Workarea D:\Work /O /I /Y

Además de retener la información del propietario y ACL, también puedes incluir la configuración de auditoría de los archivos. La copia de la configuración de auditoría puede ser útil si tu organización aplica objetos de directiva de grupo (GPO) para auditar archivos.

Para incluir la configuración de auditoría de archivos al copiar archivos con Xcopy, utiliza el interruptor /X. El interruptor /X implica también el interruptor /O, así que no es necesario utilizar ambos interruptores al mismo tiempo.

XCOPY C:\Workarea D:\Work /X /I /Y

Copiando archivos y carpetas a través de la red

No solo Xcopy puede copiar archivos entre ubicaciones en el mismo o en diferentes discos, sino que también puede copiar archivos a través de la red. Desafortunadamente, copiar archivos a través de la red no siempre es confiable. Las conexiones de red pueden sufrir interrupciones cortas y, en algunos casos, pérdida total de conexión.

Afortunadamente, puedes ejecutar Xcopy en modo reiniciable. Es decir, incluso si el progreso de la copia se detiene debido a un error de red, la copia puede reanudarse después de restablecer la conexión de red. Para ejecutar Xcopy en modo reiniciable, deberás agregar el interruptor /Z al comando.

Por ejemplo, el siguiente comando realiza una copia de archivos recursiva desde la carpeta C:\Workarea hacia una ubicación de red. El parámetro /Z hace que Xcopy se ejecute en modo reiniciable.

XCOPY C:\Workarea "\\SERVER01\Backup" /S /Z

Usando el interruptor /Z, Xcopy también muestra el progreso de la copia de archivos en porcentaje.

Copiar archivos usando E/S sin búfer

La E/S con búfer corresponde a cómo el sistema operativo almacena en búfer las lecturas y escrituras de disco en la caché del sistema de archivos. Si bien el almacenamiento en búfer acelera las lecturas y escrituras subsiguientes en el mismo archivo, tiene un costo. Como resultado, la E/S sin búfer (o una copia de archivo sin procesar) es el método preferido para copiar un archivo grande.

Este método de copia reduce la sobrecarga de la caché del sistema de archivos y evita que la caché del sistema de archivos se elimine fácilmente con grandes cantidades de datos de archivos.

Para copiar archivos grandes utilizando E/S no almacenada en búfer, puedes agregar el interruptor /J al comando Xcopy, como se muestra a continuación.

XCOPY C:\Workarea\abc.mp4 D:\Temp /I /J

Copiando Archivos con Verificación

Como cualquier otra tarea, copiar archivos no siempre devuelve resultados exitosos al 100%. Algunos archivos pueden corromperse durante la transferencia incluso si no hay errores visibles.

Con Xcopy, puedes usar el interruptor /V para verificar que los archivos de origen y destino son idénticos según su tamaño después de la copia. Archivos de origen y destino idénticos indican que la copia fue exitosa y que el archivo está intacto.

El comando a continuación copia todos los archivos desde C:\Workarea\XCopyDemo hasta C:\Workarea\Backup y verifica cada archivo usando el interruptor /V. El interruptor /F muestra la ruta completa de los archivos de origen y destino.

XCOPY C:\Workarea\XCopyDemo C:\Workarea\Backup /F /H /S /X /V

Copiando Archivos Encriptados

Xcopy también admite la copia de archivos encriptados a destinos que no admiten encriptación. Utilizando el interruptor /G, Xcopy copia archivos de origen encriptados y crea archivos de destino desencriptados.

Este modo de copia es útil, especialmente al respaldar archivos encriptados en recursos compartidos de red o volúmenes que no admiten el Sistema de Archivos encriptado (EFS).

Xcopy C:\Workarea\XCOPYDemo C:\Workarea\XCOPYDemoFolder /S /G

Copiando Estructuras de Carpetas

En algunas situaciones, los scripts o programas de copia de seguridad pueden requerir que provisiones previamente el destino antes de copiar los archivos desde la fuente. Cuando sea necesario, puedes usar Xcopy para replicar la estructura de carpetas de origen sin el contenido.

Para hacerlo, ejecuta el comando Xcopy con el interruptor /T. El uso del interruptor /T hará que Xcopy copie solo la estructura del árbol de directorios al destino, pero ignora los directorios vacíos.

También puedes agregar el interruptor /E al comando para incluir directorios vacíos, como se muestra en el ejemplo de comando a continuación.

Xcopy C:\Workarea\XCOPYDemo C:\Workarea\XCOPYDemoFolder /T /E

Errores Comunes

Si algo puede salir mal, probablemente lo hará. Lo mismo ocurre al copiar archivos, independientemente del volumen. A continuación se muestran los errores comunes de Xcopy que podrías encontrar.

Número Inválido de Parámetros

Este error suele ocurrir cuando el comando que has ingresado contiene caracteres de espacio. Para evitar este error, al escribir una ruta de origen o destino que contenga caracteres de espacio, debes rodear la ruta con comillas dobles.

Por ejemplo, si la ruta es C:\Documents and Settings, ingresa la ruta como “C:\Documents and Settings”.

No se Puede Realizar una Copia Cíclica

Este error ocurre si el directorio de origen que estás copiando también incluye el directorio de destino. En este caso, Xcopy entraría en un bucle, causando un error. Al usar Xcopy, el destino debe ser un directorio o disco completamente independiente si copias todos los directorios y subdirectorios.

Error de Análisis

Este error ocurre cuando has escrito una sintaxis incorrecta o inválida en el comando. Por ejemplo, puedes encontrarte con este error cuando has especificado tu ruta entre comillas, pero faltan las comillas de cierre.

Por ejemplo, el siguiente comando tiene un carácter de comillas dobles de cierre faltante en la ruta de destino.

Xcopy C:\Workarea "C:\Workarea\XCopy Demo /S /I /E /Y

Códigos de salida

Xcopy devuelve un código de salida para una operación, que puedes utilizar para determinar si la operación fue exitosa. Los códigos de salida son útiles, especialmente si tu tarea o script toma acciones basadas en el código de salida que recibe.

La shell de comandos guardará los códigos de salida en la variable %ErrorLevel%. Tu código puede luego examinar el valor de esta variable para determinar el resultado de la operación de Xcopy.

A continuación se muestra una tabla que lista todos los códigos de salida de Xcopy.

Exit Code Purpose
0 This exit code means that there were no errors.
1 This exit code means that Xcopy did not find any files to copy.
2 This exit code means that the Xcopy was terminated by pressing CTRL+C.
4 This exit code means that an initialization error happened either because of insufficient memory or disk space or because you’ve entered invalid syntax.
5 This exit code means that there was a disk write error.

Scripting con Xcopy

Además de usar Xcopy de forma interactiva, puedes aprovechar sus beneficios mejor si lo utilizas para automatizar tareas con scripts. A continuación se muestran un par de ejemplos que demuestran cómo puedes usar Xcopy en scripts.

Script de lote de Xcopy para copiar datos con manejo de errores

Este ejemplo de script de lote copia todos los archivos recursivamente con lógica de manejo de errores. Y según el error o código de salida, el script devuelve un mensaje que muestra la razón del error.

Para crear el archivo de lote, abre un editor de texto o código de tu elección, copia el código a continuación, pégalo en tu editor y guarda el archivo como copycomplete.bat.

@echo off
rem This batch file copies all source
rem files in all directories and sub-directories from the source
rem path (%1) to the destination path (%2)

xcopy %1 %2 /s /e

if errorlevel 4 goto lowmemory
if errorlevel 2 goto abort
if errorlevel 0 goto exit

:lowmemory
echo Insufficient memory to copy files or
echo invalid drive or command-line syntax.
goto exit

:abort
echo You pressed CTRL+C keys due to which the copy operation has been aborted.
goto exit

:exit

A continuación, para ejecutar el script, invoca su nombre en el símbolo del sistema o PowerShell, seguido de las carpetas de origen y destino.

pycomplete.bat xcopydemo xcopydemofolder
Running an Xcopy batch file

Script de lote Xcopy para Mover Datos

Xcopy no tiene funcionalidad incorporada para mover archivos y carpetas desde la fuente al destino. Sin embargo, como solución alternativa, puedes crear un script que primero Xcopy los archivos y luego elimine los archivos de la fuente.

El código a continuación copiará los archivos al destino. Y si el proceso de copia fue exitoso, el script eliminará los archivos en la fuente. Copia el código a continuación y guárdalo en un nuevo archivo llamado movefiles.bat.

Rem Batch file to move files

Xcopy /D /V %1 %2

Rem If the Xcopy process is successful (0), then delete the files at the source.
if errorlevel 0 (
echo Xcopy process completed successfully
del /Q %1
exit /B
)

Rem Errorlevel is not 0
echo The copy process has failed.

A continuación, para ejecutar el archivo por lotes movefiles.bat, invoca su nombre en el símbolo del sistema o PowerShell seguido de las rutas de origen y destino, como hiciste en el ejemplo anterior.

movefiles.bat xcopydemo xcopydemofolder

Conclusión

Si tu trabajo implica copiar archivos en grandes cantidades o crear copias de seguridad de archivos, Xcopy es una excelente herramienta que te ayudará a facilitar tu trabajo. Xcopy ofrece resultados de copia de archivos precisos y rápidos con muchas opciones para personalizar su comportamiento y adaptarlo a tus necesidades.

Source:
https://adamtheautomator.com/xcopy/