Dans ce petit article, je décris comment utiliser la cmdlet Test-Path pour vérifier si un dossier existe. Tapez Get-Help Test-Path pour obtenir des informations intégrées. Je démontre également brièvement comment utiliser la méthode de la classe .NET Exists() de la classe System.IO.Directory.

Tweet

Comment vérifier si un dossier existe avec PowerShell

Vous pouvez utiliser quelque chose comme ceci pour la vérification sur la ligne de commande :

PS C:\> Test-Path C:\WindowsTrue

Rappelez-vous que vous avez besoin de guillemets simples ou doubles autour du chemin s’il contient un espace. Les guillemets simples sont recommandés, car ils ne développent pas/substituent/interpolent les variables.

Pour s’assurer explicitement qu’il s’agit d’un répertoire et non d’un fichier, utilisez le paramètre -PathType qui accepte les valeurs suivantes :

  • Any
  • Leaf (fichier)
  • Container (répertoire/dossier)
PS C:\> Test-Path C:\Windows -PathType AnyTruePS C:\> Test-Path C:\Windows -PathType ContainerTruePS C:\> Test-Path C:\Windows -PathType LeafFalse

Exemple de capture d’écran

Powershell-comment-vérifier-si-le-dossier-existe.png

Utilisation du script

Dans un script, vous l’utiliserez généralement dans une instruction if. Pour nier et vérifier si le dossier ou le fichier n’existe pas, utilisez soit  » ! » soit « -not », et n’oubliez pas de mettre l’instruction Test-Path entre parenthèses.

N’oubliez pas non plus que si le chemin ou le nom du dossier contient un espace, vous devez entourer le chemin entier entre guillemets. Les guillemets simples ou doubles fonctionneront de la même manière s’il n’y a pas de parties « extensibles » dans le chemin ou le nom de dossier, mais le choix légèrement plus sûr est celui des guillemets simples. C’est ce que PowerShell utilise par défaut lorsque vous autocomplétez les noms avec la tabulation à l’invite.

PS C:\> if ( Test-Path -Path 'C:\Windows' -PathType Container ) { "It's a container/folder/directory" }It's a container/folder/directoryPS C:\> if ( -not (Test-Path -LiteralPath 'C:\Windows' -PathType Leaf) ) { "It's not a leaf/file" }It's not a leaf/file

Vous devez également être sensibilisé au paramètre -LiteralPath de Test-Path, que vous pouvez voir dans le deuxième exemple ci-dessus. Cela fonctionne également si votre fichier contient des caractères comme des parenthèses qui font que le paramètre -Path développe le chemin d’accès puisqu’il prend en charge la syntaxe joker par défaut. Utilisez -LiteralPath si vous n’avez pas besoin de l’expansion de -Path car c’est le choix le plus sûr pour les fichiers au nom bizarre.

Créer un répertoire s’il n’existe pas

Pour créer un répertoire s’il n’existe pas, voici un exemple très robuste de la façon dont vous pourriez vouloir le gérer. Adaptez-le à vos besoins.

Ce code a été mis dans le fichier « NewDirDemo.ps1 » que vous me voyez utiliser ci-dessous.

Param( $DirectoryToCreate)if (-not (Test-Path -LiteralPath $DirectoryToCreate)) { try { New-Item -Path $DirectoryToCreate -ItemType Directory -ErrorAction Stop | Out-Null #-Force } catch { Write-Error -Message "Unable to create directory '$DirectoryToCreate'. Error was: $_" -ErrorAction Stop } "Successfully created directory '$DirectoryToCreate'."}else { "Directory already existed"}

Démonstration d’utilisation dans la capture d’écran suivante.

Créer un répertoire s'il n'existe pas.jpg

Enumération des valeurs possibles de PathType

Une petite « astuce » pour voir les valeurs d’énumération possibles pour -PathType est d’en utiliser une qui n’existe pas, comme ceci:

PS C:\> Test-Path C:\Windows -PathType fooTest-Path : Cannot bind parameter 'PathType'. Cannot convert value "foo" to type"Microsoft.PowerShell.Commands.TestPathType" due to invalid enumeration values.Specify one of the following enumeration values and try again.The possible enumeration values are "Any, Container, Leaf".At line:1 char:31+ Test-Path C:\Windows -PathType <<<< foo + CategoryInfo : InvalidArgument: (:) , ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.TestPathCommand

Utilisation de la méthode de classe .NET System.IO.Directory Class Method « Exists »

Vous pouvez également utiliser la méthode Exists() de la classe .NET System.IO.Directory, qui nécessite un chemin complet :

PS E:\temp> ::Exists('E:\temp\')TruePS E:\temp> ::Exists('E:\temp')True

Si vous voulez vérifier si le répertoire dans lequel se trouve actuellement le script/programme contient un sous-répertoire, vous pouvez utiliser l’astuce que je démontre ci-dessous – où je vérifie s’il existe un sous-répertoire appelé « Windows ».

Dans PowerShell, l’espace de nom « System » n’a pas besoin d’être tapé explicitement, donc vous pouvez l’omettre.

PS C:\> ::Exists( (Join-Path (Get-Location) 'Windows') )TruePS C:\> cd E:\tempPS E:\temp> ::Exists( (Join-Path (Get-Location) 'Windows') )False

.

Catégories : Articles

0 commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *