Donc, si j'ai un répertoire stocké dans une variable, dites:
$scriptPath = (Get-ScriptDirectory);
Maintenant, je voudrais trouver le répertoire à deux niveaux parent.
J'ai besoin d'une belle façon de faire:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
Puis-je accéder au rootPath en une seule ligne de code?
powershell
scripting
Mark Kadlec
la source
la source
.parent
ne fonctionne que sur les objets d'annuaire. Si j'ai un chemin vers un fichier et que je veux trouver le parent du répertoire dans lequel se trouve le fichier, je dois utiliser(get-item $PathToFile ).Directory.parent
$scriptPath
existe. Sinon, utilisez simplementSplit-Path $scriptPath -parent
.J'ai résolu ça comme ça:
la source
$RootPath = Split-Path (Split-Path $PSScriptRoot)
fonctionne également car-Parent
est le paramètre de partage d'emplacement par défaut pourSplit-Path
Vous pouvez le diviser au niveau des barres obliques inverses et prendre l'avant-dernier avec une indexation de tableau négative pour obtenir uniquement le nom du répertoire des grands-parents.
Vous devez doubler la barre oblique inverse pour l'échapper dans l'expression rationnelle.
Pour obtenir le chemin complet:
Et, en regardant les paramètres de split-path, il prend le chemin comme entrée de pipeline, donc:
la source
Vous pouvez utiliser
pour obtenir le chemin de la chaîne ou si vous souhaitez utiliser le type de répertoire:
la source
Dans PowerShell 3,
$PsScriptRoot
ou pour votre question de deux parents,la source
Vous pouvez simplement en chaîner autant
split-path
que vous le souhaitez:la source
la source
Pour extrapoler un peu les autres réponses (de la manière la plus conviviale possible pour les débutants):
Vérifiez le type d'objet avec la méthode GetType pour voir avec quoi vous travaillez:
$scriptPath.GetType()
Enfin, une astuce rapide qui aide à créer des one-liners: Get-Item a l'
gi
alias et Get-ChildItem a l'gci
alias.la source
Si vous souhaitez utiliser $ PSScriptRoot, vous pouvez faire
la source
Dans PowerShell:
la source