Copiar-Elemento Excluyendo Carpeta en PowerShell

  1. Excluyendo carpetas en operaciones de copia de PowerShell utilizando la función Get-Item y el parámetro -Exclude
  2. Excluyendo carpetas en operaciones de copia de PowerShell usando Where-Object y PSIsContainer
  3. Conclusión
Copiar-Elemento Excluyendo Carpeta en PowerShell

En el ámbito de la gestión de archivos y la automatización utilizando PowerShell, la tarea de copiar archivos mientras se excluyen carpetas específicas es un desafío común pero matizado. Este artículo profundiza en dos métodos efectivos para lograr esta tarea: utilizando la función Get-Item con el parámetro -Exclude y aprovechando Where-Object con la propiedad PSIsContainer.

Ambos métodos, aunque sirven al mismo propósito, abordan el problema desde diferentes ángulos y ofrecen ventajas únicas.

Nuestro objetivo es proporcionar una comprensión integral de estos métodos, sus aplicaciones y las sutilezas de su uso. A través de explicaciones detalladas, desgloses de sintaxis y ejemplos prácticos, buscamos equipar tanto a los nuevos como a los experimentados usuarios de PowerShell con las habilidades para gestionar tareas de copia de archivos de manera eficiente, personalizando sus enfoques para adaptarse a los requisitos específicos de sus flujos de trabajo.

Excluyendo carpetas en operaciones de copia de PowerShell utilizando la función Get-Item y el parámetro -Exclude

Podemos utilizar el comando Copy-Item para copiar los archivos mientras excluimos una carpeta en PowerShell. Hay dos métodos para usar Copy-Item mientras se excluye una carpeta, uno es excluyendo una sola carpeta y el otro es excluyendo múltiples carpetas.

La sintaxis para esta operación combina Copy-Item con Get-Item -Exclude:

Copy-Item -Path (Get-Item -Path "sourcePath\*" -Exclude ('folderToExclude')).FullName -Destination "destinationPath" -Recurse -Force

Parámetros:

  • Copy-Item: Este cmdlet copia archivos y directorios a una nueva ubicación.
  • -Path: Especifica la ruta de los elementos a copiar. En nuestro caso, esto es proporcionado por Get-Item.
  • Get-Item: Recupera los elementos de la ubicación especificada.
  • -Exclude: Este parámetro en Get-Item filtra los elementos, particularmente los nombres de carpetas o archivos a excluir.
  • ('folderToExclude'): El nombre de la carpeta que deseas excluir.
  • .FullName: Recupera la ruta completa de los elementos.
  • -Destination: La ruta a la que copiar los elementos.
  • -Recurse: Incluye los contenidos de los subdirectorios.
  • -Force: Obliga al comando a ejecutarse sin pedir confirmación del usuario.

Ejemplo de código:

Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder')).FullName -Destination "destination\" -Recurse -Force

En nuestro script, comenzamos apuntando al directorio fuente (C:\origin\) y empleamos Get-Item para recuperar todos los elementos que contiene. El uso del símbolo asterisco (*) aquí actúa como un comodín, representando cada elemento dentro del directorio.

Luego aprovechamos el parámetro -Exclude para articular nuestra intención de excluir una subcarpeta específica, notablemente llamada SubFolder. El empleo de la propiedad .FullName es crítico en este contexto ya que obtiene la ruta completa de cada elemento con el que estamos tratando.

Después de curar esta lista, que omite claramente la carpeta designada, se entrega a Copy-Item. Procedemos a definir nuestra ubicación objetivo como el directorio de destino (C:\destination). Para asegurar un proceso de copia completo, que abarque todos los subdirectorios, salvo la carpeta que hemos optado por excluir, incorporamos el parámetro -Recurse.

Para suavizar aún más nuestro proceso y evitar interrupciones potenciales, entra en juego el parámetro -Force. Suprime efectivamente cualquier aviso del sistema que podría interrumpir la operación, particularmente aquellos asociados con la sobreescritura de archivos existentes en el directorio de destino.

Carpeta origin:

powershell copy-item excluir carpeta - archivos de origen

Salida:

powershell copy-item excluir carpeta - salida

El comando anterior solo excluirá una carpeta dada. También podemos excluir múltiples carpetas simplemente colocando los nombres de las múltiples carpetas en -Exclude().

Vea el comando para excluir múltiples carpetas:

Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder', 'SubFolder2')).FullName -Destination "destination\" -Recurse -Force

Vea la salida:

powershell copy-item excluir carpeta - salida

Excluyendo carpetas en operaciones de copia de PowerShell usando Where-Object y PSIsContainer

PowerShell proporciona un conjunto extenso de cmdlets para la manipulación de archivos y carpetas, siendo Copy-Item un actor clave para las operaciones de copia. Sin embargo, su funcionalidad nativa no soporta directamente la exclusión de carpetas.

Para lograr esto, empleamos una combinación de Get-ChildItem, Where-Object y la propiedad PSIsContainer. Este método es particularmente útil para operaciones de copia donde necesitas excluir directorios mientras preservas los archivos.

La estructura del script es la siguiente:

Get-ChildItem -Path "sourcePath\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destinationPath" -Recurse -Container

Parámetros:

  • Get-ChildItem -Path "sourcePath\" -Recurse: Recupera todos los elementos (archivos y carpetas) de la ruta especificada, incluyendo subdirectorios.
  • Where-Object { $_.PSIsContainer -notmatch 'True' }: Filtra todas las directorios. PSIsContainer es una propiedad booleana que es True para directorios y False para archivos.
  • Copy-Item -Destination "destinationPath" -Recurse -Container: Copia los elementos restantes (archivos) al destino. -Recurse se utiliza para asegurar la exploración de subdirectorios, y -Container preserva la estructura del directorio.

Ejemplo de código:

Get-ChildItem -Path "origin\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destination\" -Recurse -Container

En nuestro script, comenzamos recopilando todos los elementos del directorio fuente (origin\). Para hacer esto, empleamos el cmdlet Get-ChildItem.

La verdadera magia ocurre con el cmdlet Where-Object, donde introducimos un filtro para excluir específicamente directorios. Esta exclusión se basa en la condición $_ .PSIsContainer -notmatch 'True'.

Este particular fragmento de código es crucial ya que filtra efectivamente los elementos recogidos, asegurando que solo los archivos (y no los directorios) sean pasados a la tubería.

A continuación, estos archivos filtrados se entregan al cmdlet Copy-Item. Nuestro comando aquí es copiar estos archivos a nuestro destino especificado (destination\).

Un aspecto importante de esta operación es cómo se preserva la estructura del directorio original en el destino a pesar de excluir las carpetas mismas. Este equilibrio se logra a través de la cuidadosa orquestación de los parámetros -Recurse y -Container dentro de Copy-Item, asegurando que la integridad de la estructura de archivos se mantenga, menos las carpetas reales.

Salida:

powershell copy-item excluir carpeta - salida

Conclusión

En conclusión, las técnicas presentadas en este artículo — usando Get-Item con -Exclude y Where-Object con PSIsContainer — ofrecen formas poderosas y flexibles de excluir carpetas durante las operaciones de copia de PowerShell. Al comprender y aplicar estos métodos, los usuarios pueden mejorar significativamente sus capacidades de gestión de archivos y automatización en PowerShell.

El enfoque de Get-Item y -Exclude es directo y altamente efectivo para excluir carpetas específicas, mientras que los métodos Where-Object y PSIsContainer proporcionan un control más matizado, especialmente útil en escenarios donde los criterios de exclusión son más complejos o dinámicos. Ambos métodos demuestran la versatilidad y el poder de PowerShell para manejar archivos y directorios, convirtiéndolo en una herramienta invaluable para administradores de sistemas, desarrolladores y profesionales de TI.

Armados con este conocimiento, los usuarios pueden abordar con confianza una amplia variedad de tareas de copia de archivos, asegurando un control eficiente y preciso sobre sus operaciones de gestión de archivos en entornos de Windows.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - PowerShell Copy