powershell - 파일 이름과 확장자를 추출합니다.
파일명과 확장자를 my.file.xlsx 와 같이 추출해야 합니다.파일명이나 확장자를 모르기 때문에 이름에 더 많은 점이 있을 수 있으므로 오른쪽에서 문자열을 검색하여 첫 번째 점(또는 왼쪽에서 마지막 점)을 찾으면 오른쪽 부분과 왼쪽 부분을 추출합니다.
어떻게?
파일이 디스크에서 나오는 경우 및 다른 사용자가 설명한 바와 같이BaseName
그리고.Extension
속성:
PS C:\> dir *.xlsx | select BaseName,Extension
BaseName Extension
-------- ---------
StackOverflow.com Test Config .xlsx
문자열의 일부로 파일 이름을 지정받으면(텍스트 파일에서 가져온 파일 등)GetFileNameWithoutExtension
그리고.GetExtension
시스템으로부터의 정적 메서드.IO.패스 클래스:
PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
Test Config
PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx")
.xlsx
그냥 해:
$file=Get-Item "C:\temp\file.htm"
$file.Basename
$file.Extension
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
스플릿 패스 사용
$filePath = "C:\PS\Test.Documents\myTestFile.txt";
$fileName = (Split-Path -Path $filePath -Leaf).Split(".")[0];
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1];
가 텍스트 파일에서 가져온 것으로 이름 파일이 공백으로 둘러싸인 것으로 가정할 경우 다음과 같은 방법이 있습니다.
$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
PS C:\Users\joshua> $file = New-Object System.IO.FileInfo('file.type')
PS C:\Users\joshua> $file.BaseName, $file.Extension
file
.type
FileInfo 객체의 BaseName 및 Extension 속성을 확인합니다.
PowerShell 6.0 이후 에는 파라미터가 있습니다.즉, 다음과 같은 작업을 수행할 수 있습니다.
$path | Split-Path -Extension
또는
Split-Path -Path $path -Extension
위해서$path = "test.txt"
두 버전 모두 반환됩니다..txt
(완전정지)
한다면[System.IO.Path]::GetFileNameWithoutExtension()
타이핑하거나 기억하기 어렵습니다.
("file.name.ext.w..dots.ext" -split '\.' | select -SkipLast 1) -join '.'
# >> file.name.ext.w..dots
"file.name.ext.w..dots.ext" -split '\.' | select -Last 1
# >> ext
주의:
-split
(디폴트로는) regex를 사용하기 때문에.
탈출해야 한다
locale name.ext 파일 이름 구분자는 없는 것 같은데요?
-SkipLast
v5.0에서 추가되었습니다.
.NET 함수[System.IO.Path]::GetExtension()
. 문자를 포함한 확장자를 반환한다.위의 문자는 생략하고 반환한다.
분할 후 스트링을 다시 결합해야 하는 경우 비정상적인 상황에서는 결과가 달라질 수 있습니다.또는 이미 연결된 문자열을 다시 결합하는 것이 불편한 경우 다음을 수행할 수 있습니다.
$file = "file.name.ext.w..dots.ext"
$ext = $file -split '\.' | select -Last 1
$name = $file.Substring(0, $file.LastIndexOf(".$ext"))
궁금하신 분 있으면 각색한 거예요.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
언급URL : https://stackoverflow.com/questions/9788492/powershell-extract-file-name-and-extension
'programing' 카테고리의 다른 글
Bash 스크립트 파라미터 (0) | 2023.04.13 |
---|---|
Swift Xcode 6의 버튼 텍스트를 변경하는 방법 (0) | 2023.04.13 |
통합 보안 = True와 통합 보안 = SSPI의 차이점은 무엇입니까? (0) | 2023.04.13 |
Excel 번호 형식:"-409"가 뭐죠? (0) | 2023.04.13 |
WPF 치트시트가 있나요? (0) | 2023.04.13 |