Simplemente no me gusta la sintaxis de:
if (Test-Path $path) { ... }
y
if (-not (Test-Path $path)) { ... }
if (!(Test-Path $path)) { ... }
especialmente hay demasiados paréntesis y no es muy legible cuando se busca "no existe" para un uso tan común. ¿Cuál es una mejor manera de hacer esto?
Actualización: Mi solución actual es usar alias para exist
y not-exist
como se explica aquí .
Problema relacionado en el repositorio de PowerShell: https://github.com/PowerShell/PowerShell/issues/1970
powershell
orad
fuente
fuente
try{ Test-Path -EA Stop $path; #stuff to do if found } catch { # stuff to do if not found }
Respuestas:
Si solo desea una alternativa a la sintaxis del cmdlet, específicamente para archivos, use el
File.Exists()
método .NET:Si, por otro lado, desea un alias negado de propósito general para
Test-Path
, así es como debe hacerlo:notexists
ahora se comportará exactamente igualTest-Path
, pero siempre devolverá el resultado opuesto:Como ya ha demostrado, lo contrario es bastante fácil, solo alias
exists
paraTest-Path
:fuente
$path
es "especial", como en un proveedor de Powershell (piense en HKLM: \ SOFTWARE \ ...) entonces esto fallará miserablemente.if(Test-Path $path){}else{ # do your thing }
La solución de alias que publicaste es inteligente, pero yo argumentaría en contra de su uso en scripts, por la misma razón que no me gusta usar ningún alias en scripts; tiende a dañar la legibilidad.
Si esto es algo que desea agregar a su perfil para que pueda escribir comandos rápidos o usarlo como un shell, entonces puedo ver que tiene sentido.
En su lugar, podría considerar la instalación de tuberías:
Alternativamente, para el enfoque negativo, si es apropiado para su código, puede convertirlo en una verificación positiva y luego usarlo
else
para el negativo:fuente
False
. Necesitas hacerlo comoif (-not ($path | Test-Path)) { ... }
.Agregue los siguientes alias. Creo que estos deberían estar disponibles en PowerShell de forma predeterminada:
Con eso, las declaraciones condicionales cambiarán a:
y
fuente
Otra opción es usar,
IO.FileInfo
que le brinda tanta información de archivo que hace la vida más fácil simplemente usando este tipo:Más detalles en mi blog.
fuente
Para verificar si existe una ruta a un directorio, use este:
Para verificar si existe una ruta a un archivo, use lo que @Mathias sugirió:
fuente
Esta es mi forma novato de powershell de hacer esto
fuente