我需要从my.file.xlsx中提取文件名和扩展名。我不知道文件或扩展名的名称,并且名称中可能有更多的点,所以我需要从右边搜索字符串,当我找到第一个点(或从左数最后一个点)时,从那个点提取右侧的部分和左侧的部分。
也许有更好的解决方案,但我在这里或其他地方找不到任何东西。谢谢
发布于 2012-03-20 22:45:54
如果文件是从磁盘上取出的,并且如其他人所述,请使用BaseName
和Extension
属性:
PS C:\> dir *.xlsx | select BaseName,Extension
BaseName Extension
-------- ---------
StackOverflow.com Test Config .xlsx
如果给定的文件名是字符串的一部分(假设来自文本文件),我将使用System.IO.Path类中的GetFileNameWithoutExtension
和GetExtension
静态方法:
PS C:\> [System.IO.Path]::GetFileNameWithoutExtension("Test Config.xlsx")
Test Config
PS H:\> [System.IO.Path]::GetExtension("Test Config.xlsx")
.xlsx
发布于 2015-04-16 06:24:09
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
发布于 2012-03-20 22:18:28
如果来自文本文件,并且和推定名称文件用空格括起来,这是一种方法:
$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
https://stackoverflow.com/questions/9788492
复制相似问题