当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell:从路径获取文件名

作者:精品下载站 日期:2024-12-14 21:39:59 浏览:13 分类:玩电脑

PowerShell:从路径获取文件名


PowerShell 是 Microsoft 开发的一种功能强大的脚本语言和自动化框架。它提供了一个命令行界面,允许用户与计算机系统交互、管理文件和文件夹以及自动执行各种任务。使用文件路径时,通常需要从给定路径中提取文件名。可以使用 PowerShell 中提供的各种方法和 cmdlet 来完成此任务。在本综合指南中,我们将探索从 PowerShell 中的路径提取文件名的不同技术,同时确保灵活性和效率。

了解文件路径

在深入研究从 PowerShell 中的路径提取文件名的详细信息之前,清楚地了解构成文件路径的组件至关重要。在 PowerShell 中,文件路径是指定文件系统中文件或文件夹位置的字符串。它由一个驱动器号(或 UNC 路径)、后跟一系列用反斜杠分隔的目录名、最后是文件名组成。

例如,考虑以下文件路径:C:\folder\subfolder\filename.txt

  • C:\ 代表指定路径的驱动器。
  • Folder\subfolder 表示文件夹及其子文件夹。
  • filename.txt 是文件的名称。
  • .txt 是文件扩展名。

现在我们对文件路径有了基本的了解,让我们探索在 PowerShell 中从路径中提取文件名的不同方法。

使用拆分路径 Cmdlet

从路径中提取文件名是 PowerShell 脚本编写中的一项常见任务。它允许我们根据文件名操作文件,执行重命名、移动或删除文件等操作,并根据文件名生成报告或执行分析。用于从 PowerShell 中的路径提取文件名的最简单且最常用的 cmdlet 之一是 Split-PathSplit-Path cmdlet 允许我们检索给定路径的特定部分,例如文件名或父文件夹。这是基本语法和参数:


Split-Path -Path <Path> [-Qualifier] [-NoQualifier] [-Parent] [-Leaf] [-Resolve] [-PassThru] [<CommonParameters>]

以下是 split-path cmdlet 的有用参数列表。

Path

您要分割的路径

Parent

此参数用于仅返回路径的父部分。例如,如果您提供的路径为 C:\foo\bar.txt,则 Split-Path -Path C:\foo\bar.txt -Parent 将返回 C:\foo

Leaf

该参数用于仅返回路径中的最后一项或文件名

Qualifier

仅返回路径的路径部分,不返回驱动器或 UNC 服务器部分。

NoQualifier

仅返回路径部分,不返回驱动器或 UNC 服务器部分。

LeafBase

仅返回不带扩展名的路径的最后一个元素。请注意,LeafBase 参数仅在 PowerShell 6.0 及更高版本中可用。

Extension

仅返回叶的扩展名,在 PowerShell 6.0 及更高版本中可用。

要从路径中提取文件名,我们可以将 -Leaf 参数与 Split-Path cmdlet 结合使用。这是从路径获取文件名的示例:


$path = "C:\folder\subfolder\filename.txt"

#GetFileName from path
$fileName = Split-Path -Path $path -Leaf

Write-Output $fileName

在此示例中,Split-Path 命令采用存储在 $Path 中的文件路径,并仅返回路径中的最后一项(叶项),即文件名“filename.txt”。 -Leaf 参数指示 cmdlet 仅返回叶项或最后一项。结果存储在 $fileName 变量中。然后使用 Write-Output cmdlet 显示文件名。变量 $fileName 现在将包含从单个位置提取的文件名。

[玩转系统] PowerShell:从路径获取文件名

同样,您可以从多个路径获取文件名,如下所示:


#Parameter with Multiple Paths
$Paths = "C:\Temp\AppLog.txt", "C:\Users\Salaudeen\Desktop\invoice.docx"

#Get File Name from Paths
$Paths | ForEach-Object { Split-Path -Path $_ -Leaf}

提取不带扩展名的文件名

如果您特别需要提取不带文件扩展名的文件名,PowerShell 会通过 Split-Path cmdlet 提供另一个名为 -LeafBase 的参数。 PowerShell 6.0及以上版本支持此参数。

以下是提取不带扩展名的文件名的示例:


$Path = "C:\folder\subfolder\filename.txt"
$fileNameWithoutExtension = Split-Path -Path $Path -LeafBase

变量 $fileNameWithoutExtension 现在将包含不带扩展名的文件名,在本例中为 filename

使用 .NET 类库方法

从 PowerShell 中的路径提取文件名的另一种方法是利用 PowerShell 中可用的 .NET 类库方法。具体来说,System.IO.Path 类提供了处理文件路径的有用方法。

要使用 System.IO.Path 类提取不带扩展名的文件名,我们可以使用 GetFileNameWithoutExtension() 方法。这是一个例子:


$path = "C:\folder\subfolder\filename.txt"
$fileNameWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($path)

变量 $fileNameWithoutExtension 现在将存储不带扩展名的文件名,即 filename

隔离文件扩展名

假设您想根据文件扩展名对文件进行分类,以下是如何使用分割路径和正则表达式获取文件扩展名:


$MediaFile = "C:\Media\Movies\movie.mkv"
$Extension = (Split-Path -Path $MediaFile -Leaf) -replace '^.+(\..+)$','$1'
Write-Output $Extension

输出将是:


.mkv

使用 Get-ChildItem cmdlet 检索文件名

Get-ChildItem 是 PowerShell 中处理文件和目录时最常用的 cmdlet 之一。此 cmdlet 检索指定位置中的文件和目录的列表。默认情况下,它返回 FileInfoDirectoryInfo 对象的集合,其中包含有关文件和目录的信息,包括它们的名称、大小、创建日期等。

要使用 Get-ChildItem 检索文件信息,您可以指定要搜索的目录的路径。例如,要检索“C:\Temp”目录中的 CSV 文件列表,您可以使用通配符运算符来使用以下命令:


Get-ChildItem -Path "C:\Temp" -File -Filter *.csv| Select -ExpandProperty Name

该命令将返回代表指定目录中文件的文件对象列表。

[玩转系统] PowerShell:从路径获取文件名

提取不带扩展名的多个文件名

在某些情况下,您可能需要从给定目录中提取多个不带扩展名的文件名。 PowerShell 提供了 Get-ChildItem cmdlet,它允许我们从指定路径检索文件。然后,我们可以将其与 System.IO.Path 类方法结合起来,以提取不带扩展名的文件名。

这是一个例子:


#Parameter
$DirectoryPath = "C:\Temp"

#Get All Files from the Directory
$Files = Get-ChildItem -Path $DirectoryPath -File

#Get Files without Extention
$FileNamesWithoutExtension = $Files | ForEach-Object {
    [System.IO.Path]::GetFileNameWithoutExtension($_.FullName)
}
$FileNamesWithoutExtension

变量 $fileNamesWithoutExtension 现在将包含指定目录中不带扩展名的文件名数组。以下是 PowerShell ISE 的输出:

[玩转系统] PowerShell:从路径获取文件名

检查文件和文件夹是否存在

在 PowerShell 中从路径中提取文件名之前,必须确保文件和文件夹的存在。 PowerShell 提供 Test-Path cmdlet 来检查指定路径中是否存在文件或文件夹。

下面是使用 Test-Path 检查文件是否存在的示例:


$path = "C:\folder\subfolder\filename.txt"
$fileExists = Test-Path -Path $path

if ($fileExists) {
    Write-Host "The file exists."
} else {
    Write-Host "The file does not exist."
}

同样,我们可以使用 Test-Path 来检查文件夹是否存在:


$folderPath = "C:\folder\subfolder"
$folderExists = Test-Path -Path $folderPath

if ($folderExists) {
    Write-Host "The folder exists."
} else {
    Write-Host "The folder does not exist."
}

通过在提取文件名之前使用Test-Path,我们可以确保路径有效并且文件或文件夹确实存在。

在 PowerShell 中使用文件名和路径的最佳实践

在 PowerShell 中使用文件名和路径时,需要记住一些最佳实践:

  1. 始终验证用户输入:使用用户提供的文件名或路径时,请确保验证和清理输入以防止安全漏洞或意外行为。
  2. 使用错误处理:操作文件和路径时,可能会由于各种原因(例如文件权限或网络问题)而发生错误。使用适当的错误处理技术(例如 trycatch)来优雅地处理这些错误。
  3. 处理边缘情况:注意边缘情况,例如带有特殊字符或长文件路径的文件,这可能会在处理文件名和路径时导致问题。使用适当的技术,例如转义特殊字符或使用长路径的替代方法。
  4. 测试脚本:在生产环境中部署操作文件名或路径的脚本之前,请在受控环境中彻底测试它们,以确保它们按预期工作并处理所有可能的情况。

结论

从路径中提取文件名是 PowerShell 中的一项常见任务。在本文中,我们探讨了如何使用 PowerShell 轻松从路径中提取文件名。我们了解了利用 Split-Path cmdlet 和 System.IO.Path 类方法、Get-ChildItem 提取文件名的重要性> cmdlet,轻松提取带或不带扩展名的文件名。此外,Test-Path cmdlet 允许我们在执行任何操作之前验证文件和文件夹是否存在。

请记住根据您的特定要求调整这些技术,并将它们集成到您的 PowerShell 脚本中,以实现高效的文件管理和自动化。

现在您已经充分了解如何从 PowerShell 中的路径中提取文件名,您可以自信地处理文件操作并简化工作流程。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯