如何使用 PowerShell 从路径中提取文件名
-
使用
Split-Path
Cmdlet 从路径中提取文件名 - 使用 .NET 的 Path 类方法从路径中提取文件名
-
使用
Get-Item
和Get-ChildItem
Cmdlet 从路径中提取文件名 - 使用正则表达式从路径中提取文件名
- 使用字符串操作从路径中提取文件名
-
使用
System.IO.FileInfo
类从路径中提取文件名 - 结论

文件路径指示了系统中文件的位置。在 PowerShell 中处理文件时,您可能只需要从路径中获取文件名。
有多种方法可以获取文件的路径在 PowerShell 中。本教程将教您如何使用 PowerShell 从文件路径中提取文件名。
使用 Split-Path
Cmdlet 从路径中提取文件名
在 PowerShell 中,Split-Path
cmdlet 是一个方便的工具,用于孤立给定路径的特定部分。无论是父文件夹、子文件夹、文件名还是仅文件扩展名,Split-Path
都允许您有针对性地显示这些元素。
提取带扩展名的文件名
要从路径中捕获带扩展名的文件名,可以使用带有 -Leaf
参数的 Split-Path
命令:
Split-Path C:\pc\test_folder\hello.txt -Leaf
输出:
hello.txt
获取不带扩展名的文件名
在需要不带扩展名的文件名的情况下,-LeafBase
参数非常有用。但是,重要的是要注意此参数仅在 PowerShell 6.0 及更高版本中可用:
Split-Path C:\pc\test_folder\hello.txt -LeafBase
输出:
hello
使用 .NET 的 Path 类方法从路径中提取文件名
在 .NET 中,Path
类提供有用的方法,可以轻松地从指定路径中提取文件名和扩展名。让我们通过示例来探讨这些功能。
使用 GetFileName
提取带扩展名的文件名
Path
类的 GetFileName
方法从给定路径中检索文件名及其扩展名。让我们以路径 C:\pc\test_folder\hello.txt
演示这一点:
[System.IO.Path]::GetFileName('C:\pc\test_folder\hello.txt')
输出:
hello.txt
使用 GetFileNameWithoutExtension
获取不带扩展名的文件名
要仅提取不带扩展名的文件名,可以使用 GetFileNameWithoutExtension
方法。当您需要文件名本身而不包含文件类型时,这种方法特别有用:
[System.IO.Path]::GetFileNameWithoutExtension('C:\pc\test_folder\hello.txt')
输出:
hello
使用 Get-Item
和 Get-ChildItem
Cmdlet 从路径中提取文件名
在 PowerShell 中,Get-Item
和 Get-ChildItem
cmdlet 是处理文件和目录的基本工具,允许您提取有关给定位置项的特定信息。
让我们看看如何使用这些 cmdlet 从给定路径中提取文件名,包括获取带扩展名或不带扩展名的文件名的变体。
使用 Get-Item
提取带扩展名的文件名
Get-Item
cmdlet 检索有关指定项的详细信息,包括其目录、模式、最后写入时间、长度和名称。要提取带扩展名的文件名,可以结合 Get-Item
使用 .Name
属性。
让我们用特定路径 C:\pc\test_folder\hello.txt
演示这一点:
(Get-Item C:\pc\test_folder\hello.txt).Name
输出:
hello.txt
使用 Get-Item
获取不带扩展名的文件名
如果您需要仅提取不带扩展名的文件名,可以利用 .BaseName
属性结合 Get-Item
。这允许您仅从提供的路径中孤立文件名:
(Get-Item C:\pc\test_folder\hello.txt).BaseName
输出:
hello
将该方法应用于 Get-ChildItem
此方法也适用于使用 Get-ChildItem
cmdlet,该 cmdlet 检索指定位置的项的信息。以下是如何使用它提取带扩展名或不带扩展名的文件名:
(Get-ChildItem C:\pc\test_folder\hello.txt).Name
(Get-ChildItem C:\pc\test_folder\hello.txt).BaseName
输出:
hello.txt
hello
使用正则表达式从路径中提取文件名
正则表达式也可以用来从 PowerShell 中的路径提取文件名。 .NET 中的 Regex
类提供强大的模式匹配和操作工具。
让我们看看这如何工作:
# Define the path
$path = "C:\pc\test_folder\hello.txt"
# Use regular expression to extract the filename
$filename = [System.Text.RegularExpressions.Regex]::Match($path, '\\([^\\]+)$').Groups[1].Value
$filename
输出:
hello.txt
在此示例中,我们利用正则表达式捕获最后一个反斜杠后面的文本,代表带扩展名的文件名。
正则表达式 '\\([^\\]+)$'
可以分解如下:
\\
:匹配路径中的反斜杠。([^\\]+)
:捕获一个或多个非反斜杠字符(表示带扩展名的文件名),在一个捕获组内。$
:指定匹配应发生在字符串的末尾。
通过使用 Regex
类的 Match
方法,我们将正则表达式应用于路径。
结果匹配包含带扩展名的文件名。我们通过 Groups[1].Value
访问它以提取所需的文件名。
使用字符串操作从路径中提取文件名
字符串操作技术也可以用来从路径中提取文件名。例如,您可以使用 LastIndexOf
方法查找最后一个反斜杠并相应地提取文件名。
# Define the path
$path = "C:\pc\test_folder\hello.txt"
# Find the index of the last backslash
$lastBackslashIndex = $path.LastIndexOf("\") + 1
# Extract the filename
$filename = $path.Substring($lastBackslashIndex)
$filename
输出:
hello.txt
在这里,我们利用 LastIndexOf
方法确定路径中最后一个反斜杠 (\
) 的出现索引,从而识别文件名开始的位置。
$lastBackslashIndex = $path.LastIndexOf("\") + 1
:这一行计算最后一个反斜杠的索引并加1
以确保我们在反斜杠后开始提取字符。
接下来,我们利用 Substring
方法提取文件名,从最后一个反斜杠后的索引开始,一直到字符串的末尾。
$filename = $path.Substring($lastBackslashIndex)
:在这里,我们利用Substring
提取文件名,计算出的索引。
使用 System.IO.FileInfo
类从路径中提取文件名
System.IO.FileInfo
类提供属性以访问文件信息,包括文件名。我们可以创建一个 FileInfo
对象,然后访问 Name
属性以获取文件名。
# Define the path
$path = "C:\pc\test_folder\hello.txt"
# Create a FileInfo object
$fileInfo = New-Object System.IO.FileInfo $path
# Extract the filename
$filename = $fileInfo.Name
$filename
输出:
hello.txt
在这个例子中,我们使用 New-Object
和 System.IO.FileInfo
类创建一个 FileInfo
对象,从而允许我们访问与文件相关的属性和方法。
$fileInfo = New-Object System.IO.FileInfo $path
:这行代码根据提供的路径构造一个FileInfo
对象。
接下来,我们利用 FileInfo
对象的 Name
属性来提取文件名。
$filename = $fileInfo.Name
:在这里,我们通过访问FileInfo
对象的Name
属性来检索文件名。
结论
在本教程中,我们探索了从 PowerShell 路径中提取文件名的各种方法。从使用内置 cmdlet,如 Split-Path
,到利用正则表达式和字符串操作,您有一系列可供选择的选项,具体取决于您的需求。
了解这些技术将增强您处理文件路径和提取 PowerShell 中重要文件信息的能力。无论您喜欢内置 cmdlet 的简单性还是正则表达式的多功能性,PowerShell 都提供了强大的工具集以有效地操作文件。