Copy-Item

Copia un elemento de una ubicación a otra.

Syntax

Copy-Item
    [-Path] <String[]>
    [[-Destination] <String>]
    [-Container]
    [-Force]
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <PSCredential>]
    [-WhatIf]
    [-Confirm]
    [-FromSession <PSSession>]
    [-ToSession <PSSession>]
    [<CommonParameters>]
Copy-Item
    -LiteralPath <String[]>
    [[-Destination] <String>]
    [-Container]
    [-Force]
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <PSCredential>]
    [-WhatIf]
    [-Confirm]
    [-FromSession <PSSession>]
    [-ToSession <PSSession>]
    [<CommonParameters>]
Copy-Item
    [-Path] <string[]>
    [[-Destination] <string>]
    [-Container]
    [-Force]
    [-Filter <string>]
    [-Include <string[]>]
    [-Exclude <string[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <pscredential>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]
Copy-Item
    [[-Destination] <string>]
    -LiteralPath <string[]>
    [-Container]
    [-Force]
    [-Filter <string>]
    [-Include <string[]>]
    [-Exclude <string[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <pscredential>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

El Copy-Item cmdlet copia un elemento de una ubicación a otra en el mismo espacio de nombres. Por ejemplo, puede copiar un archivo en una carpeta, pero no puede copiar un archivo en una unidad de certificado.

Este cmdlet no corta ni elimina los elementos que se copian. Los elementos concretos que el cmdlet puede copiar dependen del proveedor de PowerShell que expone el elemento. Por ejemplo, puede copiar archivos y directorios en una unidad del sistema de archivos y claves del Registro y entradas en la unidad del Registro.

Este cmdlet puede copiar y cambiar el nombre de los elementos en el mismo comando. Para cambiar el nombre de un elemento, escriba el nuevo nombre en el valor del parámetro Destination . Para cambiar el nombre de un elemento y no copiarlo, use el Rename-Item cmdlet .

Ejemplos

Ejemplo 1: Copiar un archivo en el directorio especificado

En este ejemplo se copia el mar1604.log.txt archivo en el C:\Presentation directorio . El archivo original no se elimina.

Copy-Item "C:\Wabash\Logfiles\mar1604.log.txt" -Destination "C:\Presentation"

Ejemplo 2: Copia del contenido del directorio en un directorio existente

En este ejemplo se copia el contenido del C:\Logfiles directorio en el directorio existente C:\Drawings . El Logfiles directorio no se copia.

Si el Logfiles directorio tiene archivos en subdirectorios, esos subdirectorios se copian con sus árboles de archivos intactos. De forma predeterminada, el parámetro Container se establece en True, que conserva la estructura del directorio.

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings" -Recurse

Nota:

Si la ruta de acceso C:\Drawings no existe, el cmdlet copia todos los archivos de la Logfiles carpeta en un único archivo C:\Drawings.

Ejemplo 3: Copiar directorio y contenido en un nuevo directorio

En este ejemplo se copia el contenido del C:\Logfiles directorio de origen y se crea un nuevo directorio de destino. El nuevo directorio de destino se \Logs crea en C:\Drawings.

Para incluir el nombre del directorio de origen, copie en un directorio de destino existente como se muestra en el ejemplo 2. O bien, asigne un nombre al nuevo directorio de destino con el mismo que el directorio de origen.

Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings\Logs" -Recurse

Nota:

Si la ruta de acceso incluye \*, todo el contenido del archivo del directorio, incluidos los árboles de subdirectorios, se copian en el nuevo directorio de destino. Por ejemplo:

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings\Logs" -Recurse

Ejemplo 4: Copiar un archivo en el directorio especificado y cambiar el nombre del archivo

En este ejemplo se usa el Copy-Item cmdlet para copiar el Get-Widget.ps1 script desde el \\Server01\Share directorio al \\Server12\ScriptArchive directorio . Como parte de la operación de copia, el comando cambia el nombre del elemento de Get-Widget.ps1 a Get-Widget.ps1.txt, por lo que se puede adjuntar de forma segura a los mensajes de correo electrónico.

Copy-Item "\\Server01\Share\Get-Widget.ps1" -Destination "\\Server12\ScriptArchive\Get-Widget.ps1.txt"

Ejemplo 5: Copiar un archivo en un equipo remoto

Se crea una sesión en el equipo remoto denominado Server01 con la credencial de Contoso\User01 y almacena los resultados en la variable denominada $Session.

El Copy-Item cmdlet copia test.log de la D:\Folder001 carpeta en la C:\Folder001_Copy carpeta del equipo remoto mediante la información de sesión almacenada en la $Session variable . El archivo original no se elimina.

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_Copy\" -ToSession $Session

Ejemplo 6: Copiar una carpeta en un equipo remoto

Se crea una sesión en el equipo remoto denominado Server01 con la credencial de Contoso\User01 y almacena los resultados en la variable denominada $Session.

El Copy-Item cmdlet copia la D:\Folder002 carpeta en el directorio del C:\Folder002_Copy equipo remoto mediante la información de sesión almacenada en la $Session variable . Las subcarpetas o archivos no se copian sin usar el modificador Recurse . La operación crea la Folder002_Copy carpeta si aún no existe.

$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session

Ejemplo 7: Copiar recursivamente todo el contenido de una carpeta en un equipo remoto

Se crea una sesión en el equipo remoto denominado Server01 con la credencial de Contoso\User01 y almacena los resultados en la variable denominada $Session.

El Copy-Item cmdlet copia todo el contenido de la D:\Folder003 carpeta en el directorio del C:\Folder003_Copy equipo remoto mediante la información de sesión almacenada en la $Session variable . Las subcarpetas se copian con sus árboles de archivo intactos. La operación crea la Folder003_Copy carpeta si aún no existe.

$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder003\" -Destination "C:\Folder003_Copy\" -ToSession $Session -Recurse

Ejemplo 8: Copiar un archivo en un equipo remoto y, a continuación, cambiar el nombre del archivo

Se crea una sesión en el equipo remoto denominado Server01 con la credencial de Contoso\User01 y almacena los resultados en la variable denominada $Session.

El Copy-Item cmdlet copia scriptingexample.ps1 de la D:\Folder004 carpeta en la C:\Folder004_Copy carpeta del equipo remoto mediante la información de sesión almacenada en la $Session variable . El archivo original no se elimina.

$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder004\scriptingexample.ps1" -Destination "C:\Folder004_Copy\scriptingexample_copy.ps1" -ToSession $Session

Ejemplo 9: Copiar un archivo remoto en el equipo local

Se crea una sesión en el equipo remoto denominado Server01 con la credencial de Contoso\User01 y almacena los resultados en la variable denominada $Session.

El Copy-Item cmdlet copia test.log desde el remoto C:\MyRemoteData\ a la carpeta local D:\MyLocalData mediante la información de sesión almacenada en la $Session variable . El archivo original no se elimina.

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session

Ejemplo 10: Copiar todo el contenido de una carpeta remota en el equipo local

Se crea una sesión en el equipo remoto denominado Server01 con la credencial de Contoso\User01 y almacena los resultados en la variable denominada $Session.

El Copy-Item cmdlet copia todo el contenido de la carpeta remota C:\MyRemoteData\scripts en la carpeta local D:\MyLocalData mediante la información de sesión almacenada en la $Session variable . Si la carpeta scripts tiene archivos en subcarpetas, esas subcarpetas se copian con sus árboles de archivos intactos.

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\" -FromSession $Session

Ejemplo 11: Copiar recursivamente todo el contenido de una carpeta remota en el equipo local

Se crea una sesión en el equipo remoto denominado Server01 con la credencial de Contoso\User01 y almacena los resultados en la variable denominada $Session.

El Copy-Item cmdlet copia todo el contenido de la carpeta remota C:\MyRemoteData\scripts en la carpeta local D:\MyLocalData\scripts mediante la información de sesión almacenada en la $Session variable . Dado que se usa el parámetro Recurse , la operación crea la carpeta scripts si aún no existe. Si la carpeta scripts tiene archivos en subcarpetas, esas subcarpetas se copian con sus árboles de archivos intactos.

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\scripts" -FromSession $Session -Recurse

Ejemplo 12: Copiar archivos de forma recursiva desde un árbol de carpetas en la carpeta actual

En este ejemplo se muestra cómo copiar archivos de una estructura de carpetas de varios niveles en una sola carpeta plana. Los tres primeros comandos muestran la estructura de carpetas existente y el contenido de dos archivos, ambos nombres file3.txt.

PS C:\temp\test> (Get-ChildItem C:\temp\tree -Recurse).FullName
C:\temp\tree\subfolder
C:\temp\tree\file1.txt
C:\temp\tree\file2.txt
C:\temp\tree\file3.txt
C:\temp\tree\subfolder\file3.txt
C:\temp\tree\subfolder\file4.txt
C:\temp\tree\subfolder\file5.txt

PS C:\temp\test> Get-Content C:\temp\tree\file3.txt
This is file3.txt in the root folder

PS C:\temp\test> Get-Content C:\temp\tree\subfolder\file3.txt
This is file3.txt in the subfolder

PS C:\temp\test> Copy-Item -Path C:\temp\tree -Filter *.txt -Recurse -Container:$false
PS C:\temp\test> (Get-ChildItem . -Recurse).FullName
C:\temp\test\subfolder
C:\temp\test\file1.txt
C:\temp\test\file2.txt
C:\temp\test\file3.txt
C:\temp\test\file4.txt
C:\temp\test\file5.txt

PS C:\temp\test> Get-Content .\file3.txt
This is file3.txt in the subfolder

El Copy-Item cmdlet tiene el parámetro Container establecido en $false. Esto hace que el contenido de la carpeta de origen se copie, pero no conserva la estructura de carpetas. Observe que los archivos con el mismo nombre se sobrescriben en la carpeta de destino.

Ejemplo 13: Uso de filtros para copiar elementos sin recursividad

En este ejemplo se muestran los resultados mediante el parámetro Include para seleccionar los elementos que se van a copiar.

En este ejemplo se usa la siguiente estructura de carpetas que contiene los archivos que se van a copiar:

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

En este ejemplo, Copy-Item se llama a con un carácter comodín para los parámetros Path e Include . Especificar un carácter comodín para el parámetro Path garantiza que procesa todos los archivos y carpetas que coinciden con D:\temp\tree\*. El parámetro Include filtra la lista de elementos que se van a procesar, limitando la operación solo a las rutas de acceso que comienzan por ex.

PS D:\temp\test\out> Copy-Item -Path D:\temp\tree\* -Include ex*
PS D:\temp\test\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example.ps1
D:\temp\out\example.txt

El parámetro Include se aplica al contenido de D:\temp\tree la carpeta para copiar todos los elementos que coinciden con ex*. Tenga en cuenta que, sin recursividad, se copia la D:\temp\out\examples carpeta, pero no se copia ninguno de sus contenidos.

Ejemplo 14: Uso de filtros para copiar elementos con recursividad

En este ejemplo se muestran los resultados mediante el parámetro Include para seleccionar los elementos que se van a copiar.

En este ejemplo se usa la siguiente estructura de carpetas que contiene los archivos que se van a copiar:

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

En este ejemplo, Copy-Item se llama a con un carácter comodín para los parámetros Path e Include . Especificar un carácter comodín para el parámetro Path garantiza que procesa todos los archivos y carpetas que coinciden con D:\temp\tree\*. El parámetro Include filtra la lista de elementos que se van a procesar, limitando la operación solo a las rutas de acceso que comienzan por ex.

D:\temp\out> Copy-Item -Path D:\temp\tree\* -Include ex* -Recurse
D:\temp\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example.ps1
D:\temp\out\example.txt
D:\temp\out\examples\subfolder
D:\temp\out\examples\example_1.txt
D:\temp\out\examples\example_2.txt
D:\temp\out\examples\subfolder\test.txt

El parámetro Include se aplica al contenido de D:\temp\tree la carpeta para copiar todos los elementos que coinciden con ex*. Tenga en cuenta que, con recursividad, la D:\temp\out\examples carpeta se copia junto con todos los archivos y subcarpetas. La copia incluye archivos que no coinciden con el filtro de inclusión. Cuando se usa Copy-Item, los filtros solo se aplican al nivel superior especificado por el parámetro Path . A continuación, la recursividad se aplica a esos elementos coincidentes.

Nota:

El comportamiento del parámetro Exclude es el mismo que se describe en este ejemplo, salvo que limita la operación solo a las rutas de acceso que no coinciden con el patrón.

Ejemplo 15: Limitar los archivos a copiar de forma recursiva desde una ruta de acceso especificada por caracteres comodín

En este ejemplo se muestra cómo limitar los archivos copiados de forma recursiva de una ruta de acceso coincidente con caracteres comodín en otra carpeta. En el ejemplo 13 se muestra que, dado que el parámetro Include solo filtra las rutas de acceso resueltas para una ruta de acceso que especifica comodín, el parámetro Include no se puede usar para limitar los archivos copiados de forma recursiva desde una carpeta. En su lugar, puede usar Get-ChildItem para buscar los elementos que desea copiar y pasar esos elementos a Copy-Item.

En este ejemplo se usa la siguiente estructura de carpetas que contiene los archivos que se van a copiar:

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

Para copiar todos los elementos que comienzan por ex*, use Get-ChildItem con los parámetros Recurse y Filter y canalice los resultados a Copy-Item.

D:\temp\out> Get-ChildItem -Path D:\temp\tree -Recurse -Filter ex* | Copy-Item
D:\temp\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example_1.txt
D:\temp\out\example_2.txt
D:\temp\out\example.ps1
D:\temp\out\example.txt

A diferencia de Copy-Item, el parámetro Filter para Get-ChildItem se aplica a los elementos detectados durante la recursividad. Esto le permite buscar, filtrar y, a continuación, copiar elementos de forma recursiva.

Parámetros

-Confirm

Le solicita su confirmación antes de ejecutar el cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Container

Indica que este cmdlet conserva los objetos de contenedor durante la operación de copia. De forma predeterminada, el parámetro Container se establece en True.

Type:SwitchParameter
Position:Named
Default value:True
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Nota:

Este parámetro no es compatible con ningún proveedor instalado con PowerShell. Para suplantar a otro usuario o elevar las credenciales al ejecutar este cmdlet, use Invoke-Command.

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Destination

Especifica la ruta de acceso a la nueva ubicación. El valor predeterminado es el directorio actual.

Para cambiar el nombre del elemento que se va a copiar, especifique un nuevo nombre en el valor del parámetro Destination .

Type:String
Position:1
Default value:Current directory
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Exclude

Especifica uno o varios patrones o elementos de ruta de acceso, como "*.txt", para limitar la operación de este cmdlet. El valor de este parámetro filtra el resultado coincidente con caracteres comodín del parámetro Path , no los resultados finales. Este parámetro solo es efectivo cuando se especifica la ruta de acceso con uno o varios caracteres comodín. Dado que este parámetro solo filtra las rutas de acceso resueltas para el parámetro Path , no filtra ningún elemento detectado al recursar a través de carpetas secundarias con el parámetro Recurse .

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

Especifica un filtro para calificar el parámetro Path . El proveedor FileSystem es el único proveedor de PowerShell instalado que admite el uso de filtros. Puede encontrar la sintaxis del lenguaje de filtro FileSystem en about_Wildcards. Los filtros son más eficaces que otros parámetros, ya que el proveedor los aplica cuando el cmdlet obtiene los objetos en lugar de que PowerShell filtre los objetos después de recuperarlos.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Force

Indica que este cmdlet copia elementos que no se pueden cambiar de otro modo, como copiar en un archivo o alias de solo lectura.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FromSession

Se trata de un parámetro dinámico que el proveedor FileSystem pone a disposición.

Especifique el objeto PSSession desde el que se copia un archivo remoto. Cuando se usa este parámetro, los parámetros Path y LiteralPath hacen referencia a la ruta de acceso local en el equipo remoto.

Para obtener más información, consulte about_FileSystem_Provider.

Type:PSSession
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Include

Especifica uno o varios patrones o elementos de ruta de acceso, como "*.txt", para limitar la operación de este cmdlet. El valor de este parámetro filtra el resultado coincidente con caracteres comodín del parámetro Path , no los resultados finales. Este parámetro solo es efectivo cuando se especifica la ruta de acceso con uno o varios caracteres comodín. Dado que este parámetro solo filtra las rutas de acceso resueltas para el parámetro Path , no filtra ningún elemento detectado al recursar a través de carpetas secundarias con el parámetro Recurse .

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-LiteralPath

Especifica una ruta de acceso a una o varias ubicaciones. El valor de LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.

Para obtener más información, consulte about_Quoting_Rules.

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-PassThru

Devuelve un objeto que representa el elemento con el que está trabajando. De forma predeterminada, este cmdlet no genera ninguna salida.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Especifica, como matriz de cadenas, la ruta de acceso a los elementos que se van a copiar. Se permite el uso de caracteres comodín.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Recurse

Indica que este cmdlet realiza una copia recursiva.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ToSession

Se trata de un parámetro dinámico que el proveedor FileSystem pone a disposición.

Especifique el objeto PSSession al que se va a copiar un archivo remoto. Cuando se usa este parámetro, el parámetro Destination hace referencia a la ruta de acceso local en el equipo remoto.

Para obtener más información, consulte about_FileSystem_Provider.

Type:PSSession
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Muestra lo que sucedería si se ejecutara el cmdlet. El cmdlet no se ejecuta.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

String

Puede canalizar una cadena que contenga una ruta de acceso a este cmdlet.

Salidas

None

De forma predeterminada, este cmdlet no devuelve ninguna salida.

PSObject

Cuando se usa el parámetro PassThru , este cmdlet devuelve un objeto que representa el elemento copiado.

Notas

PowerShell incluye los siguientes alias para Copy-Item:

  • Todas las plataformas:
    • copy
    • cpi
  • Windows:
    • cp

Este cmdlet está diseñado para trabajar con los datos expuestos por cualquier proveedor. Para enumerar los proveedores disponibles en la sesión, escriba Get-PSProvider. Para obtener más información, consulte about_Providers.