Jadi jika saya memiliki direktori yang disimpan dalam variabel, katakan:
$scriptPath = (Get-ScriptDirectory);
Sekarang saya ingin mencari direktori dua tingkat induk.
Saya butuh cara yang bagus untuk melakukannya:
$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath
Bisakah saya mengakses rootPath dalam satu baris kode?
powershell
scripting
Mark Kadlec
sumber
sumber
.parent
hanya bekerja pada objek direktori. Jika saya memiliki jalur ke file, dan saya ingin menemukan induk dari direktori tempat file itu berada, saya perlu menggunakan(get-item $PathToFile ).Directory.parent
$scriptPath
ada. Jika tidak, gunakan sajaSplit-Path $scriptPath -parent
.Saya telah menyelesaikannya seperti ini:
$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent
sumber
$RootPath = Split-Path (Split-Path $PSScriptRoot)
juga berfungsi karena-Parent
merupakan parameter pembagian lokasi default untukSplit-Path
Anda dapat membaginya di garis miring terbalik, dan mengambil yang berikutnya-ke-terakhir dengan pengindeksan array negatif untuk mendapatkan nama direktori grandparent saja.
($scriptpath -split '\\')[-2]
Anda harus menggandakan garis miring terbalik untuk menghindarinya di ekspresi reguler.
Untuk mendapatkan seluruh jalur:
($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'
Dan, melihat parameter untuk jalur terbagi, jalur tersebut diambil sebagai masukan pipeline, jadi:
$rootpath = $scriptpath | split-path -parent | split-path -parent
sumber
Kamu bisa memakai
(get-item $scriptPath).Directoryname
untuk mendapatkan jalur string atau jika Anda ingin tipe Direktori gunakan:
(get-item $scriptPath).Directory
sumber
Di PowerShell 3,
$PsScriptRoot
atau untuk pertanyaan Anda tentang dua orang tua,$dir = ls "$PsScriptRoot\..\.."
sumber
Anda cukup merantai sebanyak yang
split-path
Anda butuhkan:$rootPath = $scriptPath | split-path | split-path
sumber
sumber
Untuk mengekstrapolasi sedikit tentang jawaban lain (dengan cara yang ramah Pemula mungkin):
Periksa tipe objek dengan Metode GetType untuk melihat apa yang Anda kerjakan:
$scriptPath.GetType()
Terakhir, tip cepat yang membantu membuat satu baris: Get-Item memiliki
gi
alias dan Get-ChildItem memilikigci
alias.sumber
Jika Anda ingin menggunakan $ PSScriptRoot, Anda dapat melakukannya
Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolve
sumber
Di PowerShell:
$this_script_path = $(Get-Item $($MyInvocation.MyCommand.Path)).DirectoryName $parent_folder = Split-Path $this_script_path -Leaf
sumber