在PowerShell中从文件名中删除path和扩展名
我有一系列文件的完整path的string。 我想只保存文件名,没有文件扩展名和前导path。 所以从这个:
c:\temp\myfile.txt
至
myfile
我实际上并没有遍历一个目录,在这种情况下,可以使用像powershell的basename
属性,而是我单独处理string。
有一个方便的.NET方法:
C:\PS> [io.path]::GetFileNameWithoutExtension("c:\temp\myfile.txt") myfile
比我想象的更容易解决显示完整path,目录,文件名或文件扩展名的问题。
$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
其他forms:
$scriptPath = split-path -parent $MyInvocationMyCommand.Definition split-path -parent $PSCommandPath Split-Path $script:MyInvocation.MyCommand.Path split-path -parent $MyInvocation.MyCommand.Definition [io.path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Name)
要么
([io.fileinfo]"c:\temp\myfile.txt").basename
要么
"c:\temp\myfile.txt".split('\.')[-2]
灵感来自@ walid2mi的回答 :
(Get-Item 'c:\temp\myfile.txt').Basename
虽然应该指出,这只有在给定文件确实存在时才有效。
你可以使用basename属性
PS II> ls *.ps1 | select basename
@Keith,
这里另一个select:
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]
这是没有括号的一个
[io.fileinfo] 'c:\temp\myfile.txt' | % basename