파일에 대한 전체 경로 인 일련의 문자열이 있습니다. 파일 확장자와 선행 경로없이 파일 이름 만 저장하고 싶습니다. 그래서 이것으로부터 :
c:\temp\myfile.txt
에
myfile
나는 실제로 디렉토리를 반복하는 것이 아니라 powershell의 basename
속성 과 같은 것을 사용할 수있는 경우가 아니라 문자열 만 처리합니다.
답변
이를위한 편리한 .NET 메서드가 있습니다.
C:\PS> [io.path]::GetFileNameWithoutExtension("c:\temp\myfile.txt")
myfile
답변
전체 경로, 디렉토리, 파일 이름 또는 파일 확장자를 표시하는 문제를 해결하기 위해 생각했던 것보다 훨씬 쉽습니다.
$PSCommandPath
(Get-Item $PSCommandPath ).Extension
(Get-Item $PSCommandPath ).Basename
(Get-Item $PSCommandPath ).Name
(Get-Item $PSCommandPath ).DirectoryName
(Get-Item $PSCommandPath ).FullName
$ConfigINI = (Get-Item $PSCommandPath ).DirectoryName+"\"+(Get-Item $PSCommandPath ).BaseName+".ini"
$ConfigINI
다른 형태 :
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
split-path -parent $PSCommandPath
Split-Path $script:MyInvocation.MyCommand.Path
split-path -parent $MyInvocation.MyCommand.Definition
[io.path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Name)
답변
@ walid2mi 의 답변 에서 영감을 얻었 습니다.
(Get-Item 'c:\temp\myfile.txt').Basename
참고 : 이것은 주어진 파일이 실제로 존재하는 경우에만 작동 합니다 .
답변
또는
([io.fileinfo]"c:\temp\myfile.txt").basename
또는
"c:\temp\myfile.txt".split('\.')[-2]
답변
basename 속성을 사용할 수 있습니다.
PS II> ls *.ps1 | select basename
답변
@Keith ,
여기에 또 다른 옵션 :
PS II> $f="C:\Downloads\ReSharperSetup.7.0.97.60.msi"
PS II> $f.split('\')[-1] -replace '\.\w+$'
PS II> $f.Substring(0,$f.LastIndexOf('.')).split('\')[-1]
답변
임의의 경로 문자열이 주어지면 System.IO.Path 개체에 대한 다양한 정적 메서드는 다음과 같은 결과를 제공합니다.
strTestPath = C : \ Users \ DAG \ Documents \ Articles_2018 \ NTFS_File_Times_in_CMD \ PathStringInfo.ps1 GetDirectoryName = C : \ Users \ DAG \ Documents \ Articles_2018 \ NTFS_File_Times_in_CMD GetFileName = PathStringInfo.ps1 GetExtension = .ps1 GetFileNameWithoutExtension = PathStringInfo
다음은 위의 출력을 생성 한 코드입니다.
[console]::Writeline( "strTestPath = {0}{1}" ,
$strTestPath , [Environment]::NewLine );
[console]::Writeline( "GetDirectoryName = {0}" ,
[IO.Path]::GetDirectoryName( $strTestPath ) );
[console]::Writeline( "GetFileName = {0}" ,
[IO.Path]::GetFileName( $strTestPath ) );
[console]::Writeline( "GetExtension = {0}" ,
[IO.Path]::GetExtension( $strTestPath ) );
[console]::Writeline( "GetFileNameWithoutExtension = {0}" ,
[IO.Path]::GetFileNameWithoutExtension( $strTestPath ) );
위의 스크립트를 작성하고 테스트 한 결과 PowerShell이 C #, C, C ++, Windows NT 명령 스크립팅 언어 및 내가 경험 한 다른 모든 것과 어떻게 다른지에 대한 몇 가지 단점을 발견했습니다.