我有一個 PowerShell 腳本,可以在系統上查找所有 log4j jar 檔案。我想根據剛剛來分隔值找到路徑了path,filename和version。
例如,如果我的回傳路徑為C:\Users\Administrator\AppData\Roaming\.minecraft\libraries\org\apache\logging\log4j\log4j-core\2.14.1\log4j-core-2.14.1.jar,我怎樣才能得到:
只是路徑—— C:\Users\Administrator\AppData\Roaming\.minecraft\libraries\org\apache\logging\log4j\log4j-core\2.14.1\
只是檔案 - log4j-core-2.14.1.jar
只是版本 - 2.14.1
uj5u.com熱心網友回復:
我會簡單地使用Get-ChildItem它。
$Item = Get-ChildItem -Path 'C:\Users\Administrator\AppData\Roaming\.minecraft\libraries\org\apache\logging\log4j\log4j-core\2.14.1\log4j-core-2.14.1.jar'
# Folder containing the file
$Item.PSParentPath
# Filename
$Item.Name
# Version extracted from the Parent path
# As string
($ITem.PSParentPath.Split('\'))[-1]
# As System.Version object
[Version]($ITem.PSParentPath.Split('\'))[-1]
或者,使用 Split-Path
$FullPath = 'C:\Users\Administrator\AppData\Roaming\.minecraft\libraries\org\apache\logging\log4j\log4j-core\2.14.1\log4j-core-2.14.1.jar'
$Filename = Split-Path -Path $FullPath -Leaf
$ParentPath = Split-Path -Path $FullPath -Parent
# Version from Parent path
$Version = $ParentPath.Split('\')[-1]
獎金
這是不必要的,因為您可以直接從路徑中獲取版本,但如果路徑沒有以這種方式格式化,您可以通過以下方式從檔案名中提取版本。
$Version = $Filename -replace 'log4j-core-(.*).jar', '$1'
獎金 #2
假設您想主動處理可能的檔案名更改,然后您可以將提取的版本決議為一個System.Version物件,以確保您獲得有意義的內容。
$Version = $null
if (![Version]::TryParse(($Filename -replace 'log4j-core-(.*).jar', '$1'),[ref]$Version)) {
Write-Warning 'Version could not be parsed from the filename'
} else {
Write-Host "Version is $Version"
}
這將確保您確實擁有某個版本。而不是不同的字串(只有當他們突然將檔案名更改為其他內容時才會發生這種情況)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/384901.html
