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
.parent
solo 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
$scriptPath
existe. De lo contrario, solo useSplit-Path $scriptPath -parent
.Lo he resuelto así:
$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
fuente
$RootPath = Split-Path (Split-Path $PSScriptRoot)
también funciona ya que-Parent
es el parámetro de división de ubicación predeterminado paraSplit-Path
Puede 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 -parent
fuente
Puedes usar
(get-item $scriptPath).Directoryname
para obtener la ruta de la cadena o si desea el tipo de directorio, use:
(get-item $scriptPath).Directory
fuente
En PowerShell 3,
$PsScriptRoot
o para su pregunta de dos padres,$dir = ls "$PsScriptRoot\..\.."
fuente
Simplemente puede encadenar tantos
split-path
como necesite:$rootPath = $scriptPath | split-path | split-path
fuente
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
gi
frases ingeniosas : Get-Item tiene el alias y Get-ChildItem tiene elgci
alias.fuente
Si desea utilizar $ PSScriptRoot, puede hacerlo
Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolve
fuente
En powershell:
$this_script_path = $(Get-Item $($MyInvocation.MyCommand.Path)).DirectoryName $parent_folder = Split-Path $this_script_path -Leaf
fuente