如何使用 PowerShell 獲取檔案擴展名
-
使用 PowerShell 的
Split-Path
獲取檔案擴展名 -
使用 PowerShell 的
Get-ChildItem
Cmdlet 獲取檔案擴展名 -
使用 PowerShell 的
System.IO.Path
獲取檔案擴展名 -
使用 PowerShell 的
System.IO.FileInfo
獲取檔案擴展名 - 結論

在撰寫 PowerShell 腳本時,通常需要從完整路徑中提取檔案名稱。例如,您的腳本收到了完整的檔案路徑,您想僅獲取檔案擴展名。
這本全面的指南深入探討了使用 PowerShell 提取檔案擴展名的各種方法,這是一項在許多腳本場景中既基礎又關鍵的任務。文章的每個部分介紹了一種不同的方法,從 Split-Path
的簡單性到更複雜的 .NET
框架和 System.IO.FileInfo
類的使用。
使用 PowerShell 的 Split-Path
獲取檔案擴展名
在這個上下文中使用 Split-Path -Leaf
的主要目的是從給定路徑中提取檔案名稱及其擴展名。當您僅處理檔案名稱或相對路徑時,這種方法特別有效。
一旦獲得檔案名稱,就可以使用字串拆分方法輕鬆提取擴展名。
示範程式碼:
# Define the file path
$filePath = "sample.txt"
# Extract the file extension
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1]
# Output the extension
Write-Output $extension
在這個腳本中,我們首先定義了一個檔案名稱 $filePath
。Split-Path -Path $filePath -Leaf
命令隔離了檔案名稱(sample.txt
)。
然後我們在點號處拆分此字串,得到一個陣列,其中第一個元素是沒有擴展名的檔案名稱(sample
),第二個元素是擴展名(txt
)。通過訪問這個陣列的第二個元素 [1]
,我們獲得了擴展名。
最後,使用 Write-Output
顯示擴展名。
輸出:
使用 PowerShell 的 Get-ChildItem
Cmdlet 獲取檔案擴展名
Get-ChildItem
命令獲取一個或多個指定位置的項目。例如,如果對象是容器,則會獲取該容器內部的物品,稱為子項。
位置可以是檔案系統,例如目錄,或由其他 Windows PowerShell 提供者公開的站點。Get-ChildItem
命令獲取檔案系統驅動器中的目錄、子目錄和檔案。
由於 Get-ChildItem
cmdlet 處理檔案,因此它具有我們可以導出以獲取查詢檔案擴展名的 PowerShell 屬性屬性。與 Split-Path
cmdlet 不同,此方法甚至對於檔案名稱中有點字符的情況下也能正確顯示擴展名。
示範程式碼:
Get-ChildItem 'sample.txt' | Select-Object Extension
在這個腳本中,Get-ChildItem 'sample.txt'
獲取 sample.txt
的檔案對象。Get-ChildItem
cmdlet 通常用於列出目錄中的項目,但當提供具體檔案名稱時,它會返回該檔案的檔案對象。
此對象包含各種屬性,其中之一是檔案的擴展名。
然後將 Get-ChildItem
的輸出通過管道傳遞給 Select-Object Extension
。此 cmdlet 篩選檔案對象的屬性,僅輸出 Extension
屬性。
輸出:
使用 PowerShell 的 System.IO.Path
獲取檔案擴展名
以下方法基於 .NET
框架類。雖然通常不建議在 PowerShell 腳本中使用 .NET
框架類,特別是如果可用原生 PowerShell 命令,但這在特定用例中可能合適。
在下面的示例中,如果您提供了檔案名稱,我們將使用 System.IO.Path
類的 GetExtension
靜態方法:
示範程式碼:
[System.IO.Path]::GetExtension("sample.txt")
在提供的示例中,使用了 .NET
類 [System.IO.Path]
,並調用了它的靜態方法 GetExtension()
。我們傳遞 "sample.txt"
作為方法的參數。
此方法分析字串並提取表示檔案擴展名的子字串。這種方法的美在於其簡單直接,因為它不需要檔案存在於檔案系統上。
輸出:
使用 PowerShell 的 System.IO.FileInfo
獲取檔案擴展名
在這個上下文中,System.IO.FileInfo
的主要用途是獲取特定檔案的詳細信息,例如其擴展名。這種方法在需要檔案元數據而不僅僅是基本檔案處理的腳本中特別有用。
示範程式碼:
# Create a FileInfo object for the specified file
$FileInfo = New-Object System.IO.FileInfo('sample.txt')
# Access the extension property of the FileInfo object
$Extension = $FileInfo.Extension
# Print the extension
Write-Output $Extension
在這個腳本中,我們通過為 sample.txt
創建一個 System.IO.FileInfo
對象來啟動過程。此對象封裝了有關檔案的各種詳細信息,包括其名稱、目錄、大小以及重要的擴展名。
通過訪問 FileInfo
對象的 .Extension
屬性,我們提取了檔案的擴展名。此屬性以字串形式返回擴展名,包含前導點(例如,.txt
)。
輸出:
結論
在 PowerShell 中導航檔案擴展名的細微差別揭示了一系列技術,每種技術都有其獨特的優勢和應用。這次探索使我們從 Split-Path
和 Get-ChildItem
的簡單用法進入了 .NET
框架的更深層次,采用了 System.IO.Path
和 System.IO.FileInfo
,在複雜性和能力之間優雅地達到了平衡。
無論您是自動化日常任務、執行批量檔案操作,還是開發先進的系統管理腳本,了解這些方法都能豐富您的 PowerShell 工具箱。這裡討論的多樣方法突顯了 PowerShell 的適應性和穩健性,使新手和有經驗的腳本編寫者都能精確和高效地定制他們的解決方案。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn