我有一些文件,其名称如下,
输入可以是以下内容之一,
ABC.sample.tar.gz
XYZ.sample.tar.gz.Manifest
123.sample.zip
我有几个要求
示例输出:$ filename = ABC.sample或XYZ.sample或123.sample
代码:
$SURL = "ABC.sample.tar.gz.manifest"
$UDRname = [IO.Path]::GetFileNameWithoutExtension($SURL)
$UDRname
输出:ABC.sample.tar.gz
期望:
$ filename = ABC.sample
$ filename = XYZ.sample
$ filename = 123.sample
$ trimed = XYZ.sample.tar.gz
答案 0 :(得分:0)
您将遇到的主要问题是[IO.Path]::GetFileNameWithoutExtension($SURL)
,它不支持多重扩展的概念。
通过为多个点扩展添加特殊考虑, 这是应该为您工作的东西。
在$DoubleExtensions
中添加任何其他多个扩展名(不包括清单扩展名),以涵盖您可能遇到的其他情况。
请考虑以下内容:
Function Get-FileInfos($FullName) {
$DoubleExtensions = @('.tar.gz')
$Manifestext = '.manifest'
$IsManifest = $FullName.EndsWith($Manifestext)
$Extension, $TrimmedName = $null
$NameToProcess = $FullName
# Process manifest extention
if ($IsManifest) {
$TrimmedName = [IO.Path]::GetFileNameWithoutExtension($FullName)
$NameToProcess = $TrimmedName
}
# Process double extensions
Foreach ($Ext in $DoubleExtensions) {
if ($NameToProcess.EndsWith($Ext)) {
if ($IsManifest -eq $false) {
$Extension = $Ext
$ShortName = $NameToProcess.Substring(0, $NameToProcess.Length - $ext.Length)
}
else {
$Extension = $Ext
$ShortName = $NameToProcess
}
break
}
}
# Process normal extensions
if ($null -eq $Extension ) {
if ($IsManifest -eq $false) {
$Extension = [io.Path]::GetExtension($NameToProcess)
$ShortName = [IO.Path]::GetFileNameWithoutExtension($NameToProcess)
}
else {
$ShortName = $NameToProcess
}
}
# If manifest, extension should be .manifest without original file extension
if ($IsManifest) { $Extension = $Manifestext }
return [PSCustomObject]@{
FullName = $FullName
TrimmedName = $TrimmedName
ShortName = $ShortName
Extension = $Extension
}
}
样本测试
$TestList = @(
'ABC.sample.tar.gz.manifest'
'DEF.sample.tar.gz'
'GHI.Sample.manifest'
'JKL.exe'
)
$TestList | foreach { Get-FileInfos -FullName $_ }