我有一個需要檢查的 zip 存檔。我需要使用 Powershell 查找檔案擴展名為 .serverrevision 的特定檔案的檔案名。
zip 存檔中只有一個具有此檔案擴展名的檔案。檔案名類似于“2.1.4.serverrevision”。我需要提取版本號,即本例中的 2.1.4。
我知道我可以使用以下方法列出 zip 存檔的內容:
[IO.Compression.ZipFile]::OpenRead($ziparchive.FullName).Entries.FullName | %{ "$ziparchive`:$_" }
但是我不知道如何在該函式回傳的串列中搜索該檔案擴展名,然后帶出檔案名。檔案名可能類似于 2.1.4.serverrevision。
有什么建議?
uj5u.com熱心網友回復:
使用.Where()和.ForEach() 陣列方法.Where()的組合:過濾和.ForEach()轉換(提取感興趣的名稱部分):
[IO.Compression.ZipFile]::OpenRead($ziparchive.FullName).Entries.FullName.
Where({ [IO.Path]::GetExtension($_) -eq '.serverrevision' }, 'First').
ForEach({ [IO.Path]::GetFileNameWithoutExtension($_) }
筆記:
您可以使用 analogous
Where-Object和cmdlet實作相同的效果,盡管對于已經在記憶體中或很容易放入記憶體中的集合,這些方法更快。ForEach-Object- 但是,
'First'一旦找到第一個匹配項就停止處理的引數 - 一個重要的性能優化 - 目前不適用于Where-Object; GitHub 問題 #v建議也將這些當前專屬于該.Where()方法的功能引入 cmdlet。
- 但是,
在PowerShell (Core) 7 中,呼叫方法的替代
[IO.Path]方法是使用Split-Pathcmdlet,它現在提供-Extension和切換(在Windows PowerShell-LeafBase中不可用)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/412552.html
標籤:
