Je n'aime tout simplement pas la syntaxe de:
if (Test-Path $path) { ... }
et
if (-not (Test-Path $path)) { ... }
if (!(Test-Path $path)) { ... }
surtout il y a trop de parenthèses et pas très lisible lors de la vérification de "pas exister" pour une utilisation aussi courante. Quelle est la meilleure façon de procéder?
Mise à jour: Ma solution actuelle consiste à utiliser des alias pour exist
et not-exist
comme expliqué ici .
Problème associé dans le référentiel PowerShell: https://github.com/PowerShell/PowerShell/issues/1970
powershell
orad
la source
la source
try{ Test-Path -EA Stop $path; #stuff to do if found } catch { # stuff to do if not found }
Réponses:
Si vous souhaitez simplement une alternative à la syntaxe de l'applet de commande, en particulier pour les fichiers, utilisez la
File.Exists()
méthode .NET:Si, d'un autre côté, vous voulez un alias annulé à usage général
Test-Path
, voici comment procéder:notexists
se comportera désormais exactement commeTest-Path
, mais retournera toujours le résultat opposé:Comme vous l'avez déjà montré, l'inverse est assez simple, il suffit d'alias
exists
pourTest-Path
:la source
$path
c'est "spécial", comme sur un fournisseur Powershell (pensez à HKLM: \ SOFTWARE \ ...) alors cela échouera lamentablement.if(Test-Path $path){}else{ # do your thing }
La solution d'alias que vous avez publiée est intelligente, mais je suis contre son utilisation dans les scripts, pour la même raison que je n'aime pas utiliser d'alias dans les scripts; cela a tendance à nuire à la lisibilité.
Si c'est quelque chose que vous souhaitez ajouter à votre profil afin que vous puissiez taper des commandes rapides ou l'utiliser comme shell, alors je pourrais voir que cela a du sens.
Vous pouvez plutôt envisager la tuyauterie:
Alternativement, pour l'approche négative, si cela est approprié pour votre code, vous pouvez en faire un contrôle positif puis utiliser
else
pour le négatif:la source
False
. Vous devez le faire commeif (-not ($path | Test-Path)) { ... }
.Ajoutez les alias suivants. Je pense que ceux-ci devraient être disponibles dans PowerShell par défaut:
Avec cela, les instructions conditionnelles deviendront:
et
la source
Une autre option consiste à utiliser
IO.FileInfo
ce qui vous donne tellement d'informations sur les fichiers qu'il vous facilite la vie en utilisant simplement ce type:Plus de détails sur mon blog.
la source
Pour vérifier s'il existe un chemin vers un répertoire, utilisez celui-ci:
Pour vérifier si un chemin vers un fichier existe, utilisez ce que @Mathias a suggéré:
la source
C'est ma façon novatrice de PowerShell de faire ça
la source