Copy-Item
Copia un elemento de una ubicación a otra.
Sintaxis
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 del Logfiles
árbol de carpetas en una sola carpeta C:\Drawings
, sobrescribiendo los archivos con el mismo nombre.
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.
Tipo: | SwitchParameter |
Alias: | cf |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | True |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | PSCredential |
Posición: | Named |
Valor predeterminado: | Current user |
Requerido: | False |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | 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 .
Tipo: | String |
Posición: | 1 |
Valor predeterminado: | Current directory |
Requerido: | False |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | 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 .
Tipo: | String[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | PSSession |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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 .
Tipo: | String[] |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | String[] |
Alias: | PSPath, LP |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-PassThru
Devuelve un objeto que representa el elemento con el que está trabajando. De forma predeterminada, este cmdlet no genera ninguna salida.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | String[] |
Posición: | 0 |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | True |
-Recurse
Indica que este cmdlet realiza una copia recursiva.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | 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.
Tipo: | PSSession |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-WhatIf
Muestra lo que sucedería si se ejecutara el cmdlet. El cmdlet no se ejecuta.
Tipo: | SwitchParameter |
Alias: | wi |
Posición: | Named |
Valor predeterminado: | False |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
Puede canalizar una cadena que contenga una ruta de acceso a este cmdlet.
Salidas
None
De forma predeterminada, este cmdlet no devuelve ninguna salida.
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.