Quitar elemento si el archivo existe en PowerShell

Quitar elemento si el archivo existe en PowerShell

Como administrador, uno de nuestros posibles deberes probablemente sea administrar archivos. Esta situación suele ocurrir si estamos administrando varios servidores de archivos.

Una tarea específica que podemos hacer dentro del servidor es copiar archivos en una ubicación diferente para hacer quizás una copia o espejo del archivo de una empresa.

Sin embargo, ¿y si necesitamos realizar copias masivas a la vez? Existe la posibilidad de que también podamos encontrar archivos existentes en la ubicación de destino durante la copia masiva.

Este artículo explicará cómo copiar archivos de forma masiva, comprobar si existen en la carpeta de destino y eliminarlos mediante PowerShell.

Eliminar elemento si el archivo existe después de Copiar elemento en PowerShell

Para este artículo, nos centraremos y utilizaremos los comandos Get-ChildItem, Remove-Item y Copy-Item. Compartiremos el bloque de secuencias de comandos donde podemos copiar archivos de forma masiva y verificar si existen en la carpeta de destino y, si existe, el archivo se eliminará y se sobrescribirá.

Por lo tanto, declare sus carpetas de origen y destino como se muestra a continuación, y profundicemos y discutamos el bloque de secuencias de comandos en detalle.

Código de ejemplo:

$sourceFolder = "C:\Temp"
$destFolder = "C:\PS"

Get-ChildItem $sourceFolder\Scripts -Recurse | %{
    Remove-Item $_ -ErrorAction Ignore
  	Copy-Item -Path $_.FullName -Destination $destFolder
}
  1. Primero, declare sus carpetas de origen y destino dentro de cada variable como nuestras variables $sourceFolder y $destFolder.

  2. A continuación, usaremos el comando Get-ChildItem para obtener todos los archivos de la carpeta y colocarlos en una lista de matriz. El comando Get-ChildItem también puede atender a varias carpetas.

    Para comprobar si hay varias carpetas, inserte una coma (,) entre destinos como el fragmento de código siguiente.

    Get-ChildItem $sourceFolder\Scripts, $sourceFolder\Test
    

    El parámetro -Recurse se utiliza para buscar archivos que también están dentro de la subcarpeta de la carpeta de origen principal.

  3. Luego usamos el comando Remove-Item para eliminar el archivo ya existente. Como puede ver, hemos utilizado un parámetro llamado -ErrorAction que establecerá nuestra preferencia de acción si se produce un error.

    En este caso, el archivo no existe en el archivo de destino si se produce un error. Nuestra preferencia de acción está establecida en Ignorar, que ignorará el comando Eliminar elemento si se produce un error y continuará la ejecución del script en esa línea.

    Alternativamente, podemos acortar esta línea de comando usando alias como el fragmento de código de ejemplo a continuación.

    rm yourfile.zip -ea ig
    

Copiar archivos con el comando Mover elemento

También podemos utilizar el comando Move-Item como alternativa a Copy-Item. El comando Mover elemento comprueba automáticamente si el archivo existe en la carpeta de destino.

El comando omitirá el archivo si el valor es true. Esto significa que podemos eliminar la línea de comando Remove-Item y tener un script más corto que se parecerá al fragmento de código a continuación.

$sourceFolder = "C:\Temp"
$destFolder = "C:\PS"

Get-ChildItem $sourceFolder\Scripts -Recurse | %{
    Move-Item -Path $_.FullName -Destination $destFolder
}
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artículo relacionado - PowerShell File