Powershell에서 부모의 부모 디렉터리를 얻는 방법은 무엇입니까?


95

따라서 변수에 저장된 디렉토리가 있으면 다음과 같이 말하십시오.

$scriptPath = (Get-ScriptDirectory);

이제 부모 수준 의 디렉토리를 찾고 싶습니다 .

좋은 방법이 필요합니다.

$parentPath = Split-Path -parent $scriptPath
$rootPath = Split-Path -parent $parentPath

한 줄의 코드로 rootPath에 액세스 할 수 있습니까?

답변:


162

디렉토리 버전

get-item 당신의 친절한 도움의 손길입니다.

(get-item $scriptPath ).parent.parent

문자열 만 원하는 경우

(get-item $scriptPath ).parent.parent.FullName

파일 버전

$scriptPath파일을 가리키는 경우 Directory먼저 속성 을 호출해야 하므로 호출은 다음과 같습니다.

(get-item $scriptPath).Directory.Parent.Parent.FullName

주의
이것은 $scriptPath존재하는 경우에만 작동 합니다. 그렇지 않으면 Split-Pathcmdlet 을 사용해야 합니다.


디렉터리 개체를 반환하는 멋진 @rerun, 문자열로 경로를 반환하는 명령은 무엇입니까?
Mark Kadlec 2012 년

12
.parent디렉터리 개체에서만 작동합니다. 나는 파일의 경로를 가지고, 내가 파일에있는 디렉토리의 부모를 찾으려면, 내가 사용해야(get-item $PathToFile ).Directory.parent
Baodad

6
이것은 $scriptPath존재하는 경우에만 작동 합니다. 그렇지 않으면 Split-Path $scriptPath -parent.
orad

2
나는 @Baodad 코멘트를 귀하의 답변에 병합하여 SO의 다른 구성원에게 더 잘 보이도록 제안했습니다.
SOReader dec

34

다음과 같이 해결했습니다.

$RootPath = Split-Path (Split-Path $PSScriptRoot -Parent) -Parent

$RootPath = Split-Path (Split-Path $PSScriptRoot)-Parent의 기본 위치 분할 매개 변수 이므로 작동 합니다.Split-Path
jarrad_obrien

21

백 슬래시에서 분할하고 음의 배열 인덱싱을 사용하여 마지막 순서를 가져와 조부모 디렉토리 이름 만 얻을 수 있습니다.

($scriptpath -split '\\')[-2]

정규식에서 이스케이프하려면 백 슬래시를 두 배로 늘려야합니다.

전체 경로를 얻으려면 :

($path -split '\\')[0..(($path -split '\\').count -2)] -join '\'

그리고 split-path의 매개 변수를 보면 경로를 파이프 라인 입력으로 사용하므로 다음과 같습니다.

$rootpath = $scriptpath | split-path -parent | split-path -parent

먼저 해당 매개 변수를 확인해야합니다.
mjolinor

12

당신이 사용할 수있는

(get-item $scriptPath).Directoryname

문자열 경로를 가져 오거나 디렉토리 유형을 사용하려면 다음을 사용하십시오.

(get-item $scriptPath).Directory

5

PowerShell 3에서 $PsScriptRoot또는 두 부모에 대한 질문에 대해

$dir = ls "$PsScriptRoot\..\.."

5

split-path필요한만큼 간단히 연결할 수 있습니다 .

$rootPath = $scriptPath | split-path | split-path


2

다른 답변을 약간 외삽하려면 (가능한 한 초보자에게 친숙한 방식으로) :

  • 유효한 경로를 가리키는 문자열 개체는 Get-Item 및 Get-ChildItem과 같은 함수를 통해 DirectoryInfo / FileInfo 개체로 변환 할 수 있습니다.
  • .Parent는 DirectoryInfo 개체에서만 사용할 수 있습니다.
  • .Directory는 FileInfo 개체를 DirectoryInfo 개체로 변환하고 다른 유형 (다른 DirectoryInfo 개체 포함)에서 사용되는 경우 null을 반환합니다.
  • .DirectoryName은 FileInfo 개체를 String 개체로 변환하고 다른 형식 (다른 String 개체 포함)에 사용되는 경우 null을 반환합니다.
  • .FullName은 DirectoryInfo / FileInfo 개체를 String 개체로 변환하고 다른 형식 (다른 DirectoryInfo / FileInfo 개체 포함)에 사용되는 경우 null을 반환합니다.

GetType 메서드로 개체 유형을 확인하여 작업중인 항목을 확인하십시오. $scriptPath.GetType()

마지막으로, 한 줄로 만드는 데 도움이되는 빠른 팁 : Get-Item에는 gi별칭이 있고 Get-ChildItem에는 gci별칭이 있습니다.


0

$ PSScriptRoot를 사용하려면 할 수 있습니다.

Join-Path -Path $PSScriptRoot -ChildPath ..\.. -Resolve

0

powershell에서 :

$this_script_path = $(Get-Item $($MyInvocation.MyCommand.Path)).DirectoryName

$parent_folder = Split-Path $this_script_path -Leaf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.