IT

Powershell에서 부모 디렉토리를 가져오려면 어떻게 해야 합니까?

itgroup 2023. 4. 8. 08:22
반응형

Powershell에서 부모 디렉토리를 가져오려면 어떻게 해야 합니까?

변수에 격납된 디렉토리가 있는 경우는, 다음과 같이 합니다.

$scriptPath = (Get-ScriptDirectory);

이제 상위 2단계 위의 디렉토리를 찾습니다.

좋은 방법이 필요합니다.

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

한 줄의 코드로 rootPath에 접속할 수 있습니까?

디렉토리 버전

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.

나는 그것을 다음과 같이 해결했다.

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

백슬래시에서 분할하고 음의 배열 인덱싱을 사용하는 다음에서 마지막까지 가져와 할아버지 디렉토리 이름만 가져올 수 있습니다.

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

백슬래시를 두 배로 늘려야 정규식에서 벗어날 수 있습니다.

전체 경로를 가져오려면:

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

또한 분할 경로의 매개 변수를 살펴보면 경로를 파이프라인 입력으로 사용하기 때문에 다음과 같습니다.

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

사용할 수 있습니다.

(get-item $scriptPath).Directoryname

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

(get-item $scriptPath).Directory

당신은 단지 많은 수의 체인을 할 수 있다.split-path필요한 경우:

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

가장 간단한 해결법

여기 가장 간단한 해결책이 있습니다.

"$path\..\.."

절대 경로를 얻으려면

"$path\..\.." | Convert-Path

재사용 가능한 해결책

여기 재사용 가능한 솔루션이 있습니다.먼저 getParent 함수를 정의한 후 직접 호출합니다.

function getParent($path, [int]$deep = 1) {
    $result = $path | Get-Item | ForEach-Object { $_.PSIsContainer ? $_.Parent : $_.Directory }
    for ($deep--; $deep -gt 0; $deep--) { $result = getParent $result }
    return $result
}
getParent $scriptPath 2

PowerShell 3에서는$PsScriptRoot아니면 두 부모에 대한 질문을 위해

$dir = ls "$PsScriptRoot\..\.."
Split-Path -Path (Get-Location).Path -Parent

다른 답변을 약간 추측하려면(최대한 초보자 친화적인 방법으로) 다음 절차를 수행합니다.

  • 유효한 경로를 가리키는 문자열 개체는 Get-Item 및 Get-ChildItem 등의 함수를 통해 DirectoryInfo/FileInfo 개체로 변환할 수 있습니다.
  • .부모는 디렉토리에서만 사용할 수 있습니다.Info 오브젝트
  • .Directory는 FileInfo 개체를 디렉토리로 변환합니다.Info 객체(파일의 디렉토리를 대상으로 함)는 다른 유형(다른 디렉토리도 포함)에서 사용할 경우 null을 반환합니다.Info 오브젝트).
  • .DirectoryName은 FileInfo 개체를 String 개체(파일 디렉토리 대상)로 변환하고 다른 유형(다른 String 개체도 포함)에서 사용할 경우 null을 반환합니다.
  • .FullName은 DirectoryInfo/FileInfo 개체를 String 개체로 변환하고 다른 유형(다른 DirectoryInfo/FileInfo 개체도 포함)에서 사용할 경우 null을 반환합니다.
  • .Path는 PathInfo 개체를 String 개체로 변환하고 다른 유형(다른 PathInfo 개체도 포함)에서 사용할 경우 null을 반환합니다.

합니다. GetType은 다음과 같습니다.$scriptPath.GetType()

작성에 이 되는 : 에는 "Get-Item"이 .gi에는 Get-ChildItem이 .gci

$PSScriptRoot를 사용하려면 다음 작업을 수행합니다.

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

powershell의 경우:

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

$parent_folder = Split-Path $this_script_path -Leaf

언급URL : https://stackoverflow.com/questions/9725521/how-to-get-the-parents-parent-directory-in-powershell

반응형