PowerShell Split-Path Cmdlet로 경로 분할하는 방법

경로를 분할하여 해당 부분을 얻어야 하는 경우가 있습니까? 그렇다면 PowerShell Split-Path를 신뢰할 수 있는 친구로 생각할 수 있습니다. 파일, 인증서 및 레지스트리 작업을 할 때 경로가 위치를 나타낸다는 것을 알 수 있습니다.

그리고 언젠가는 자동화를 수행할 때 경로의 어느 부분을 반환할지 필터링해야 할 수도 있습니다. 다행히도이 자습서에서는 PowerShell Split-Path cmdlet를 사용하는 방법을 가르쳐줄 것입니다.

읽어보세요! 계속 읽으며 PowerShell 무기함에 대한 새로운 무기를 얻어보세요!

전제 조건

이 실전 자습서의 예제를 따라하려면 PowerShell 5.1 이상이 포함 된 모든 현대 버전의 Windows를 실행하는 컴퓨터가 필요합니다. 이 자습서에서는 PowerShell 7.1.1을 사용하는 Windows 10 20H2를 사용할 것입니다.

경로에는 무엇이 있습니까?

PowerShell Split-Path cmdlet로 깊게 파기 전에 경로가 무엇인지 명확하게 알아야합니다. 경로는 특정 형식을 따르는 항목의 위치를 결정합니다.

예를 들어 파일의 경로는 C:\demo\subfolder1\TestFile_11.txt.입니다. 이 경로를 부분으로 나누면 다음이 포함됩니다:

  • C: is the drive or the qualifier, or the specified path. The qualifier is the part of the path from the left up to the colon (:) character.
  • \demo\subfolder1\는 폴더 및 하위 폴더 또는 컨테이너입니다.
  • TestFile_11.txt은 파일 이름 또는 리프입니다. 리프는 경로의 마지막 요소 또는 부분입니다.

기억하세요, 경로는 파일 및 폴더에만 적용되는 것은 아닙니다. 다른 유효한 경로에는 다음이 포함될 수 있습니다:

  • 인증서 (예: Cert:\CurrentUser\My)
  • 레지스트리 (예: HKCU:\Software)
  • 함수 (예: Function:\New-Guid)
  • 변수 (예: Variable:\PSEdition)
  • 활성 디렉터리 (예: AD:\CN=Users,DC=Constoso,DC=com)

PowerShell Split-Path 매개변수

Split-Path와 같은 모든 cmdlet은 cmdlet의 동작을 조작하고 출력을 반환하는 일련의 매개변수와 함께 제공됩니다. 이러한 매개변수가 PowerShell Split-Path 구문을 구성합니다.

  • -Path – 이 매개변수는 분할하려는 하나 이상의 경로 문자열을 수용합니다. 이 매개변수는 파이프라인 입력도 허용합니다. 경로에 와일드카드도 허용됩니다.
  • -LiteralPath-Path 매개변수와 마찬가지로, -LiteralPath 매개변수도 분할할 경로를 수용합니다. 그러나 이 매개변수는 경로를 그대로 취급합니다. 즉, 이 매개변수를 사용하여 경로를 지정하면 명령이 와일드카드를 해석하지 않습니다.
  • -Resolve – 이 매개변수는 Split-Path cmdlet에게 제공한 경로에 의해 참조된 파일 또는 항목을 해결하도록 지시합니다. 그 자체적인 특성으로 인해 이 매개변수를 -LiteralPath 매개변수와 함께 사용할 수 없습니다.
  • -IsAbsolute – 이 매개변수는 지정한 경로가 절대 경로인지 여부를 결정하기 위해 부울 값을 반환합니다.

PowerShell Split-Path cmdlet에는 -Credential라고 불리는 매개변수도 있습니다. 이 매개변수는 명령줄 개체를 수락하는 것으로 알려져 있습니다. 그러나 Microsoft에 따르면, 이 매개변수는 기본적으로 제공되는 PowerShell 공급자 중 어느 것에서도 지원되지 않으며 사용하면 오류가 발생합니다.

다음 매개변수는 분할 위치 매개변수라고 합니다. 이러한 매개변수는 PowerShell Split-Path cmdlet에게 경로의 요소 또는 일부를 반환하도록 지시합니다. cmdlet은 경로의 요소 중 하나만 반환할 수 있기 때문에 한 번에 하나의 이러한 매개변수만 사용할 수 있습니다.

  • -Parent – 지정한 경로의 상위 위치(항목 또는 파일 이름 없음)를 반환합니다. 이 매개변수는 기본 분할 위치 매개변수이기도 합니다. 즉, 이 매개변수를 생략하고도 상위 위치를 결과로 얻을 수 있습니다.
  • -Leaf – 경로의 마지막 요소 또는 리프만을 반환합니다.
  • -LeafBase – 확장자 없이 경로의 마지막 요소 또는 리프만을 반환합니다. 이 매개변수는 PowerShell 6.0 이상에서만 사용할 수 있습니다.
  • -Extension – 마지막 닷 “.“부터 경로의 마지막 문자까지만 반환합니다. 이 매개 변수는 PowerShell 6.0 이상에서만 사용할 수 있습니다.
  • -Qualifier – 경로의 드라이브 또는 한정자만 반환합니다.
  • -NoQualifier – 경로의 나머지에서 드라이브 또는 한정자를 제거합니다.

PowerShell Split-Path Cmdlet 사용(예제)

PowerShell Split-Path cmdlet을 사용하면 경로의 일부를 분할하고 해체할 수 있습니다. 그런 다음 경로의 어떤 부분을 반환할지 지정할 수 있습니다. 출력 요구 사항에 따라 한정자, 한정자 없는 경로 및 파일 이름을 반환할지 선택할 수 있습니다.

경로의 상위 폴더 가져오기

경로의 상위 폴더를 반환하려면 PowerShell Split-Path cmdlet을 실행하고 -Parent 매개 변수를 추가하십시오.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Parent

아래 결과는 명령이 상위 폴더의 경로를 반환함을 보여줍니다.

Returning the parent containers of the Item

팁: 매개 변수 없이 PowerShell Split-Path cmdlet을 실행하면 기본적으로 상위 폴더를 반환하며, 이는 -Parent 매개 변수를 사용하는 것과 동일한 동작입니다.

팁: -Path 매개 변수는 여러 경로를 허용하므로 단일 명령에서 여러 경로 문자열 값을 분할할 수 있습니다.

e.g., Split-Path -Path 'c:\folder1','c:\folder2'

한정자 없는 경로 표시

상상해보세요. 한 드라이브에서 다른 드라이브로 폴더 트리 구조를 복제하는 스크립트를 만든다고 상상해보세요 (예: C:\demo\subfolder1에서 D:\demo\subfolder1). 코드를 작성할 때 원본 경로를 분할하여 드라이브 문자를 제외한 폴더 구조만 가져오고 싶을 수 있습니다.

자격 부여자를 제외한 경로를 얻으려면 아래 명령과 같이 PowerShell Split-Path cmdlet를 -NoQualifier 매개변수와 함께 실행하십시오. 이 명령은 경로를 분할하면서 결과에서 드라이브 문자를 생략합니다.

Split-Path -Path C:\demo\subfolder1 -NoQualifier

아래 결과에서 볼 수 있듯이 noQualifier 매개변수를 사용하면 경로를 반환하지만 자격 부여 문자열은 제외됩니다.

Returning the Path Without the Qualifier

경로의 드라이브 또는 자격 부여 가져오기

경우에 따라 자격 부여자 또는 드라이브 문자열 만 반환해야 할 때가 있습니다. 예를 들어 스크립트가 드라이브 문자를 기반으로 결과를 요약하도록 하려는 경우입니다.

이를 위해 아래 PowerShell Split-Path 명령을 -Qualifier 매개변수와 함께 실행하십시오. 이 명령은 경로를 분할하고 결과로 자격 부여 문자열 만 반환합니다.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Qualifier
Returning the Path’s Drive or Qualifier

파일, 디렉터리 또는 항목의 이름 표시

경로를 나무로 생각해보세요. 자격 부여자는 나무 자체이며, 폴더는 가지이며, 마지막에는 잎을 찾을 수 있습니다. 잎은 경로 끝에 있는 임의의 길이가 0이 아닌 문자열입니다.

경로를 분할하여 잎을 가져와야 할 때 아래 Split-Path 명령을 실행하고 -Leaf 매개변수를 추가하십시오.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Leaf

결과적으로 아래 이미지는 지정한 경로에서 파일 이름만 반환하는 명령을 보여줍니다.

Returning the Path’s Leaf

파일 이름과 확장자 분리하기 (≥PowerShell 6.0)

참고: 이 섹션은 PowerShell 6.0 이상에 적용됩니다.

패스를 분리하고 항목을 반환했습니다. 이 경우, 항목은 파일 이름(TestFile_11.txt)으로, 두 부분으로 나눌 수 있습니다 – 베이스와 확장자입니다. PowerShell의 Split-Path cmdlet을 사용하면 -LeafBase-Extension 매개변수를 사용하여 이 두 부분으로 재분할 수 있습니다.

파일 이름의 베이스와 확장자를 가져오려면 아래 명령을 실행하세요.

패스에 확장자가 없는 경우, Extension 매개변수는 빈 문자열을 반환합니다.

Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -LeafBase
Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -Extension
Splitting the Leaf’s Base and Extension

파일 이름과 확장자 분리하기 (≤ Windows PowerShell 5.1)

유감스럽게도, Windows PowerShell 5.1 및 이전 버전에서는 -LeafBase-Extension 매개변수를 사용할 수 없습니다. 하지만 걱정하지 마세요. PowerShell의 어떤 기능을 사용하여 이러한 매개변수의 출력을 복제할 수 있습니다. Windows PowerShell 5.1만 사용할 수 있는 경우에도 말이죠.

Split-Path cmdlet 대신에, 다음으로 가장 좋은 방법을 사용할 것입니다 – split() 메서드-replace 연산자의 조합입니다.

A PowerShell string object, such as the path, contains a split() method. This method allows you to split a string into multiple elements based on a delimiter character that you provide. And in the case of paths, the delimiter is the (\\) back-slash character.

반면에, -replace 연산자를 사용하면 정규 표현식 (RegEx)을 사용하여 문자열을 교체할 수 있습니다.

LeafBase 매개 변수 결과를 모방하려면 PowerShell에서 아래 명령을 실행하세요.

# '\'를 구분자로 사용하여 경로('C:\demo\subfolder1\TestFile_11.txt')를 분할합니다.
# 분할 후 마지막 '[-1]' 요소를 선택합니다 (TestFile_11.txt)
# 이 패턴과 일치하는 문자열을 검색합니다 --> '\.[^.]*$'
# ^ 이 패턴은 경로에서 마지막 점 "."과 그 이후의 모든 문자를 일치시킵니다.
# 그런 다음 일치하는 것을 아무것도/빈 값 ''으로 대체합니다.
('C:\demo\subfolder1\TestFile_11.txt').split('\')[-1] -replace '\.[^.]*$',''

결과적으로 아래 스크린샷은 명령이 파일 이름의 기본 이름만 반환한 것을 보여줍니다.

Getting the file base in PowerShell 5.1

이제 파일 확장자만 가져오려면 PowerShell에서 아래 명령을 실행하십시오.

# '.'를 구분자로 사용하여 경로('C:\demo\subfolder1\TestFile_11.txt')를 분할합니다.
# 분할 후 마지막 '[-1]' 요소를 선택합니다 (txt)
('C:\demo\subfolder1\TestFile_11.txt').split('.')[-1]

아래 결과는 명령이 파일 이름 확장자만 반환한 것을 보여줍니다 – txt.

Getting the file extension in PowerShell ≤ 5.1

경로가 절대인지 확인하기

시스템 관리자로서, 두 가지 경로 유형을 마주칠 것입니다—절대상대적. 하지만 그 차이는 무엇일까요? 절대 경로는 한정자로 시작합니다, 예를 들어 C:\demo 또는 HKCU:\Software와 같이요. 반면에, 상대 경로는 한정자가 없습니다, 예를 들면 .\demo 또는 \folder1\folder2와 같이요.

PowerShell의 Split-Path cmdlet은 -IsAbsolute 매개변수를 사용하여 절대 경로를 식별하는 데 도움이 될 수 있습니다. 이를 위해 아래 명령을 실행하여 경로가 절대인지 여부를 확인하십시오.

# 이 경로는 절대적입니다
Split-Path -Path C:\demo\subfolder1\TestFile_11.txt -IsAbsolute
# 이 경로는 상대적입니다
Split-Path -Path .\demo\subfolder1\TestFile_11.txt -IsAbsolute

아래에서 볼 수 있듯이 -isAbsolute 매개변수는 경로가 절대(TRUE)인지 상대(FALSE)인지를 나타내는 부울 값이 반환됩니다.

Determining if the Path is Absolute

와일드카드를 사용하여 경로 분할 및 해결

지금까지 Split-Path cmdlet으로 분할한 경로는 존재하지 않아도 됩니다. 경로가 존재하든 존재하지 않든이 cmdlet은 분할하고 결과를 제공합니다.

그러나 PowerShell Split-Path cmdlet에는 -Resolve라는 다른 매개변수가 있습니다. 이 매개변수를 사용하면 와일드카드로 참조되는 항목을 해결할 수 있습니다. 그리고 이 매개변수를 사용하려면 분할할 경로와 내부 항목이 이미 존재해야합니다.

예를 들어, *.txt 파일 확장명과 일치하는 항목을 반환하려면 아래 명령을 실행하십시오. -Leaf 매개변수는 cmdlet이 부모 컨테이너가 아닌 항목만 반환하도록합니다.

(*) 와일드카드는 일치하는 하나 이상의 문자를 나타내고 (?)는 하나의 문자 와일드카드를 나타냅니다.

Split-Path -Path C:\demo\subfolder1\*.txt -Leaf -Resolve

아래 결과는 파일 TestFile_11.txt에서 TestFile_20.txt까지의 파일 목록입니다. 이 파일들은 모두 .txt 파일 이름 확장명과 일치합니다.

Resolving matching filenames

단일 문자 일치를 해결하려면 와일드카드인 (*)를 와일드카드인 (?)로 바꿔주세요.

Split-Path -Path C:\demo\subfolder1\TestFile_2?.txt -Resolve -Leaf

아래 출력은 파일 TestFile_20.txt만 표시됩니다. 이 파일은 유일하게 일치하는 파일이기 때문입니다.

Resolving matching single character

경로에 역이스케이프 문자(예: “`)가 포함되어 있다면 경로를 단일 인용부호로 묶어 경로를 해결하세요. 예를 들어 아래 명령은 역이스케이프 문자를 포함하는 경로를 분할하고 해결합니다.

Split-Path -Path 'C:\demo\subfolder1\dir`n\TestFile_2?.txt' -Leaf -Resolve
Splitting and Resolving a Path with Escape Characters

개념 증명으로, 해당 경로를 단일 인용부호로 묶지 않으면 명령이 경로가 존재하지 않는 오류를 반환합니다. 더블 따옴표를 사용하는 경우에도 동일한 오류가 발생합니다.

Split-Path -Path C:\demo\subfolder1\dir`n\TestFile_2?.txt -Leaf -Resolve
Split-Path -Path "C:\demo\subfolder1\dir`n\TestFile_2?.txt" -Leaf -Resolve
Resolving a Path without enclosing single quotation marks

결론

PowerShell의 Split-Path cmdlet은 시스템 관리자와 사용자 모두에게 필수적인 도구입니다. 이 튜토리얼은 Split-Path cmdlet이 주어진 경로를 분할하고 사용하는 매개변수에 따라 특정 요소를 반환하는 방법을 가르치기 위한 것입니다.

이전에 작업에서 Split-Path를 사용한 적이 있나요? 그렇지 않다면, 이 튜토리얼이 수동 또는 자동화 작업에서 사용하도록 설득되었나요? 또는 PowerShell의 Split-Path보다 더 나은 경로를 분할하는 다른 방법을 알고 계신가요?

Source:
https://adamtheautomator.com/powershell-split-path/