HOWTO · PowerShell
PowerShell con Robocopy y Paso de Argumentos
Aprenda a copiar archivos y directorios con robocopy desde PowerShell, incluida la forma de pasar las opciones como argumentos separados.
En esta página
Para copiar archivos o directorios desde PowerShell, llama a la utilidad de Windows robocopy e indica un directorio de origen, uno de destino y los criterios de selección de archivos u opciones que necesites. El patrón de comando que aparece a continuación muestra cómo colocar esos argumentos; el ejemplo de PowerShell explica cómo mantener separadas varias opciones.
Usa el comando robocopy para copiar archivos en PowerShell
El patrón del comando es robocopy <Source> <Destination> [<File(s)>] [<Options>]. El origen y el destino son directorios. La selección opcional de archivos puede especificar uno o varios archivos, o bien un patrón; las opciones controlan cómo se realiza la copia. Robocopy es una utilidad de línea de comandos de Windows, así que ejecuta el comando en Windows con robocopy.exe disponible.
Por ejemplo, este comando copia report.txt de un directorio a otro y oculta el encabezado y el resumen del trabajo de Robocopy:
robocopy C:\Work\Source C:\Work\Backup report.txt /njh /njs
Sustituye las rutas y el nombre de archivo de ejemplo por ubicaciones que existan en tu equipo. Para copiar un árbol de directorios, omite el argumento de selección de archivos y coloca las opciones después del destino. Robocopy copia archivos de los directorios especificados; usa opciones como /S o /E para incluir subdirectorios según el comportamiento que necesites. Comprueba que hayan llegado los archivos esperados y revisa el informe de Robocopy antes de confiar en la copia para una tarea de copia de seguridad o sincronización.
Este ejemplo de PowerShell mantiene cada opción en un elemento separado de una matriz y muestra la lista que se puede pasar mediante expansión de argumentos a una llamada de comando:
$options = @('/njh', '/njs')
"Options passed: $($options -join ', ')"
Options passed: /njh, /njs
Al invocar un programa externo en PowerShell, pasar una matriz mediante expansión de argumentos hace que cada elemento se envíe como un argumento independiente. Por ejemplo, después de asignar a $source, $destination y $file las rutas y el nombre de archivo deseados, llama a & robocopy $source $destination $file @options. La llamada requiere Windows y Robocopy, por eso se muestra en línea y no como parte del ejemplo de matriz portátil.
Evita guardar varias opciones en una sola cadena, como '/njh /njs': PowerShell pasa ese valor como un único argumento. Dividir una cadena sencilla por espacios puede servir para opciones simples, pero no es un analizador general de argumentos. Puede fallar si un valor contiene espacios o usa comillas, porque los espacios en blanco por sí solos no indican cómo deben agruparse los argumentos. Es preferible usar una matriz con un argumento completo en cada elemento.
Puedes añadir más modificadores como elementos separados de la matriz o usar un patrón como *.txt para seleccionar archivos. Comprueba los archivos copiados e interpreta el resultado informado por Robocopy según los significados documentados de sus códigos de salida: los valores inferiores a 8 indican que no se informó de ningún fallo de copia; un valor de 8 o superior indica al menos un fallo. Para consultar los detalles de las opciones y los códigos de salida, visita la referencia de comandos de Robocopy de Microsoft.
Conclusión
Usa robocopy desde PowerShell con directorios de origen y destino, seguidos de una selección opcional de archivos y las opciones necesarias. Guarda varias opciones en una matriz y pásala mediante expansión de argumentos para que cada una llegue a Robocopy como un argumento independiente. Verifica los archivos copiados y comprueba el resultado informado por Robocopy.