powershell-파일 이름 및 확장자 추출


114

예를 들어 my.file.xlsx에서 파일 이름과 확장자를 추출해야합니다. 파일 이름이나 확장자를 모르고 이름에 점이 더있을 수 있으므로 오른쪽에서 문자열을 검색하고 첫 번째 점 (또는 왼쪽에서 마지막)을 찾으면 해당 부분을 추출해야합니다. 그 점에서 오른쪽과 왼쪽 부분.

더 나은 해결책이 있을지 모르지만 여기나 다른 곳에서 아무것도 찾지 못했습니다. 감사합니다


텍스트 파일 또는 무엇에서 추출합니까?
CB.

안녕하세요 크리스찬, 제 질문을 업데이트했습니다. 파일 이름에서 추출해야합니다. 감사합니다
culter

답변:


174

파일이 디스크에서 나오고 다른 사람들이 언급했듯이 BaseNameExtension속성을 사용하십시오 .

PS C:\> dir *.xlsx | select BaseName,Extension

BaseName                                Extension
--------                                ---------
StackOverflow.com Test Config           .xlsx  

파일 이름을 문자열의 일부로 지정하면 (예 : 텍스트 파일 에서 가져옴) System.IO.Path 클래스 의 GetFileNameWithoutExtensionGetExtension정적 메서드를 사용합니다 .

PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
Test Config
PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx")
.xlsx

9
MSDN 설명서를 참조하지 않고 System.IO.Path 클래스에서 더 유용한 메서드를 보려면 다음을 사용할 수 있습니다.[System.IO.Path] | Get-Member -Static
Phil

2
마침표 ( ".")를 포함[System.IO.Path]::GetExtension 하는 확장자 를 반환합니다 .
Ohad Schneider

@OhadSchneider 감사합니다
m1m1k

24
PS C:\Windows\System32\WindowsPowerShell\v1.0>split-path "H:\Documents\devops\tp-mkt-SPD-38.4.10.msi" -leaf
tp-mkt-SPD-38.4.10.msi

PS C:\Windows\System32\WindowsPowerShell\v1.0> $psversiontable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.5477
BuildVersion                   6.1.7601.17514
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

13

텍스트 파일에서 가져온 것으로 가정하고 이름 파일이 공백으로 둘러싸여 있으면 다음과 같은 방법이 있습니다.

$a = get-content c:\myfile.txt

$b = $a | select-string -pattern "\s.+\..{3,4}\s" | select -ExpandProperty matches | select -ExpandProperty value

$b | % {"File name:{0} - Extension:{1}" -f $_.substring(0, $_.lastindexof('.')) , $_.substring($_.lastindexof('.'), ($_.length - $_.lastindexof('.'))) }

파일 인 경우 필요에 따라 다음과 같이 사용할 수 있습니다.

$a = dir .\my.file.xlsx # or $a = get-item c:\my.file.xlsx 

$a
    Directory: Microsoft.PowerShell.Core\FileSystem::C:\ps


Mode           LastWriteTime       Length Name
----           -------------       ------ ----
-a---      25/01/10    11.51          624 my.file.xlsx


$a.BaseName
my.file
$a.Extension
.xlsx

9
PS C:\Users\joshua> $file = New-Object System.IO.FileInfo('file.type')
PS C:\Users\joshua> $file.BaseName, $file.Extension
file
.type

8

FileInfo 개체의 BaseName 및 Extension 속성을 확인합니다.


1
어떤 특정 정보를 찾고 있습니까? 파일을 Get-Member로 파이프하여 모든 구성원을 표시하거나 MSDN을 검색하여 공식 도움말을 찾으십시오.
셰이 레비

7

분할 경로 사용

$filePath = "C:\PS\Test.Documents\myTestFile.txt";
$fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];

2
파일 이름에 마침표가없는 경우에만 작동합니다.
Halfdone

2
Split(".")[-1]이름에 점이있는 파일로 작동하도록 변경할 수 있습니다.
phuclv

6

그냥 해:

$file=Get-Item "C:\temp\file.htm"
$file.Basename 
$file.Extension

1
나는 그것이되어야한다고 생각한다$file.Basename
john v kumpf

0

누군가가 궁금하다면 이것은 적응입니다. RoboCopy가 무결성을 위해 하나의 파일을 여러 서버에 성공적으로 복사했는지 테스트해야했습니다.

   $Comp = get-content c:\myfile.txt

ForEach ($PC in $Comp) {
    dir "\\$PC\Folder\Share\*.*" | Select-Object $_.BaseName
}

멋지고 간단하며 디렉토리와 그 안에 파일이 표시됩니다. 하나의 파일 이름이나 확장자를 지정하려면 *를 원하는대로 바꾸십시오.

    Directory: \\SERVER\Folder\Share

Mode                LastWriteTime     Length Name                                                                                                                                             
----                -------------     ------ ----                                                                                                                                             
-a---         2/27/2015   5:33 PM    1458935 Test.pptx                                                                                                             

0

PowerShell을 6.0로, Split-Path-Extenstion매개 변수를. 이는 다음을 수행 할 수 있음을 의미합니다.

$path | Split-Path -Extension

또는

Split-Path -Path $path -Extension

들어 $path = "test.txt"두 버전 모두 반환됩니다 .txt전체 정지를 inluding.

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