Entonces, si tengo un directorio almacenado en una variable, diga:
$scriptPath = (Get-ScriptDirectory);
Ahora me gustaría encontrar el directorio dos niveles superiores.
Necesito una buena forma de hacer:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
¿Puedo acceder a rootPath en una línea de código?
powershell
scripting
Mark Kadlec
fuente
fuente

.parentsolo funciona en objetos de directorio. Si tengo una ruta a un archivo y quiero encontrar el padre del directorio en el que se encuentra el archivo, necesito usarlo(get-item $PathToFile ).Directory.parent$scriptPathexiste. De lo contrario, solo useSplit-Path $scriptPath -parent.Lo he resuelto así:
$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parentfuente
$RootPath = Split-Path (Split-Path $PSScriptRoot)también funciona ya que-Parentes el parámetro de división de ubicación predeterminado paraSplit-PathPuede dividirlo en las barras invertidas y tomar el penúltimo con indexación de matriz negativa para obtener solo el nombre del directorio de abuelos.
($scriptpath -split '\\')[-2]Tienes que doblar la barra invertida para escapar en la expresión regular.
Para obtener el camino completo:
($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'Y, al observar los parámetros de ruta dividida, toma la ruta como entrada de canalización, por lo que:
$rootpath = $scriptpath | split-path -parent | split-path -parentfuente
Puedes usar
(get-item $scriptPath).Directorynamepara obtener la ruta de la cadena o si desea el tipo de directorio, use:
(get-item $scriptPath).Directoryfuente
En PowerShell 3,
$PsScriptRooto para su pregunta de dos padres,$dir = ls "$PsScriptRoot\..\.."fuente
Simplemente puede encadenar tantos
split-pathcomo necesite:$rootPath = $scriptPath | split-path | split-pathfuente
fuente
Para extrapolar un poco las otras respuestas (de la manera más amigable para los principiantes):
Verifique el tipo de objeto con el método GetType para ver con qué está trabajando:
$scriptPath.GetType()Por último, un consejo rápido que ayuda a hacer
gifrases ingeniosas : Get-Item tiene el alias y Get-ChildItem tiene elgcialias.fuente
Si desea utilizar $ PSScriptRoot, puede hacerlo
Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolvefuente
En powershell:
$this_script_path = $(Get-Item $($MyInvocation.MyCommand.Path)).DirectoryName $parent_folder = Split-Path $this_script_path -Leaffuente