如何使用 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