如何使用 PowerShell 从路径中提取文件名

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

文件路径指示了系统中文件的位置。在 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-ItemGet-ChildItem Cmdlet 从路径中提取文件名

在 PowerShell 中,Get-ItemGet-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-ObjectSystem.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 都提供了强大的工具集以有效地操作文件。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

相关文章 - PowerShell File