powershell - 需要修剪双扩展名文件的扩展名
问题描述
我有一些名称如下的文件,
输入可以是以下之一,
ABC.sample.tar.gz
XYZ.sample.tar.gz.Manifest
123.sample.zip
我有几个要求
- 需要完全删除扩展名并将没有扩展名的文件名存储到变量中。
样本输出:$filename=ABC.sample 或 XYZ.sample 或 123.sample
- 如果“.manifest”存在并存储到另一个变量中,则只需要修剪它。
代码:
$SURL = "ABC.sample.tar.gz.manifest"
$UDRname = [IO.Path]::GetFileNameWithoutExtension($SURL)
$UDRname
输出:ABC.sample.tar.gz
期待:
- 必须删除实际的文件扩展名,如下所示
$文件名=ABC.sample
$文件名=XYZ.sample
$文件名=123.sample
- 如果文件名中包含 .manifest。它必须修剪掉。
$trimed = XYZ.sample.tar.gz
解决方案
您将遇到的主要问题是[IO.Path]::GetFileNameWithoutExtension($SURL)
which 不支持多个扩展的概念。
通过为多个点扩展添加特殊考虑,这应该适合您。
在 中添加任何其他多个扩展(不包括清单扩展)$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 $_ }
推荐阅读
- pygame - Pygame.MOUSEBUTTONDOWN 的问题
- python - 如何从字典键“消息”中提取第一个 IP 地址并使用提取的 IP 地址添加一个名为“IP”的新键?
- c# - 如何计算谁先接受订单?
- python - 如何从另一个“屏幕”上的输入填充recycleview
- python - tkinter 如何在不单击按钮的情况下刷新标签以显示 GPIO 状态
- python - 使用 pip 安装 Adafruit_BBIO 库时出错
- python - on_direct_message is not listening the direct message streaming using tweepy
- html - xhr.open() 函数中的 URL 参数有什么作用?
- c# - 过程或函数 Proc_PIP_Employee 指定了太多参数
- postgresql - 我如何知道 PostgreSQL 数据库中用于 CAST 数据类型的函数