Test-Path o como saber si existe un archivo

A veces cuando estamos armando un script, nos encontramos con la necesidad de validar la existencia de un archivo en un directorio en particular, por ejemplo.

Este simple requisito vamos a resolverlo con el comando Test-Path.

Ya sea para buscar un archivo o constatar que realmente se encuentre en ese lugar, este muchacho nos devolverá un True o False, dependiendo de si lo encuentra o no.

Test-Path for the win!

Vamos a recrear una situación para su correcto uso:

Supongamos que necesito verificar si el archivo .msi de la última versión (al momento de escribir el post) de PowerShell Core (PowerShell-6.1.1-win-x64.msi) se encuentra en la carpeta Downloads, ubicada en mi perfil. Por lo que vamos a necesitar escribir las siguientes líneas en nuestra consola:

  # Chequear si se encuentra el archivo
  $PScore = "C:Users\vmsilvamolina\Downloads\PowerShell-6.1.1-win-x64.msi"
  Test-Path $PScore

Que devolverá True (si se encuentra) o False, en caso negativo.

Si le damos un poco mas de rosca al asunto, podemos definir un mensaje en caso de que lo encuentre, de la siguiente manera:

  # Chequear si se encuentra el archivo
  $PScore = "C:\Users\vmsilvamolina\Downloads\PowerShell-6.1.1-win-x64.msi"

  $ExisteFile = Test-Path $PScore

  If ($ExisteFile -eq $True) {
    Write-Host "Existe archivo de PowerShell Core!"
  } Else {
    Write-Host "No se encuentra la .ISO"
  }

Un poco más complejo…

De forma más avanzada, también se encuentra disponible la opción de poder comprobar que existan archivos con ciertas extensiones. Para aclarar mejor esto, tenemos el siguiente ejemplo.

Vamos a suponer que existe una carpeta que tiene por nombre ExcelFiles, donde se alojan unicamente archivos con extensión .xlsx. Pretendo comprobar si existen otros archivos con diferentes extensiones, para ello voy a ejecutar:

  Test-Path C:\ExcelFiles\\* -Exclude *.xlsx

En caso de que se encuentre un archivo con una extensión diferente, el retorno va a ser True.

Bug

Es conocido que en el caso de ejecutar la comprobación de un path que consista en un único espacio (“ “) retornará $true, por lo que se recomienda utilizar trim() al string a comprobar para evitar esto.

Happy scripting!

Comments