【发布时间】:2012-12-25 23:59:39
【问题描述】:
我需要从文件路径中提取文件扩展名。 例如:我有一个文件路径,如:
\\Test\data\data.dll
如何从文件路径中去掉data.dll,这样我就只得到
\\Test\data\
作为输出。
我尝试使用通配符 - *.但这没有用。
谢谢!
【问题讨论】:
标签: string powershell replace
我需要从文件路径中提取文件扩展名。 例如:我有一个文件路径,如:
\\Test\data\data.dll
如何从文件路径中去掉data.dll,这样我就只得到
\\Test\data\
作为输出。
我尝试使用通配符 - *.但这没有用。
谢谢!
【问题讨论】:
标签: string powershell replace
只是为了解决@StephenMills 在他的回答中所说的问题的解决方法:
PS C:\ps> ( [system.io.fileinfo]"J:\data\data.dll" ).FullName
J:\data\data.dll
PS C:\ps> ( [system.io.fileinfo]"J:\data\data.dll" ).BaseName
data
PS C:\ps> ( [system.io.fileinfo]"J:\data\data.dll" ).name
data.dll
PS C:\ps> ( [system.io.fileinfo]"J:\data\data.dll" ).DirectoryName
J:\data
【讨论】:
这里有 2 种不同的方法。一种是使用拆分路径。另一种是使用 -replace 与正则表达式。它们都在 PowerShell V3 中运行良好,但如果路径中有驱动器号,但拆分路径在 V2 中不起作用,但您的系统没有该驱动器号。
#Get Folder
Split-Path '\\test\data\data.dll'
'\\test\data\data.dll' -replace '\\[^\\]+$'
#Get File
Split-Path '\\test\data\data.dll' -Leaf
'\\test\data\data.dll' -replace '^\\.*\\'
【讨论】:
Split-Path 'J:\data\data.dll' 您将收到错误消息:“找不到驱动器。名称为 'J' 的驱动器不存在。”我很久以前在 connect.microsoft.com 上向他们报告过这个问题,但事实并非如此固定到 V3。 link
在您的情况下,有一个特殊的 cmdlet,默认情况下会在最后删除文件或文件夹。试试:
$path = \\test\data\data.dll
#Get folderpath
Split-Path $path
#Get filename only (thanks to Christian for tip)
Split-Path $path -Leaf
【讨论】:
Split-Path \\test\data\data.dll -Leaf