ZetCode

PowerShell Test-Path

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍PowerShell中的Test-Path cmdlet。此cmdlet检查路径是否存在,并返回True或False。它适用于文件、文件夹和注册表项。

Test-Path基础知识

Test-Path cmdlet确定路径的所有元素是否存在。它可以测试文件、目录和注册表路径。如果所有元素都存在,则cmdlet返回$true,否则返回$false。它在文件操作之前进行验证很有用。

基本Test-Path用法

使用Test-Path的最简单方法是使用单个路径参数。这会检查指定的文件夹或文件是否存在。cmdlet返回一个布尔值。您可以在条件语句中使用结果。

testpath1.ps1
Test-Path -Path "C:\Windows\System32\cmd.exe"

此命令检查cmd.exe是否存在于System32中。如果找到,则返回$true,否则返回$false。为了获得准确的结果,路径必须精确。

检查目录是否存在

Test-Path可以通过指定路径来验证目录是否存在。使用-PathType参数显式检查目录。这可以避免与名称相同的文件的混淆。目录路径应以反斜杠结尾。

testpath2.ps1
Test-Path -Path "C:\Program Files\" -PathType Container

这会检查“C:\Program Files\”是否为有效目录。-PathType Container参数确保我们正在测试的是文件夹,而不是文件。

检查文件是否存在

要专门测试文件,请使用-PathType Leaf。这会将文件与名称相似的目录区分开来。可以使用通配符进行模式匹配。这在检查具有特定命名模式的文件时很有用。

testpath3.ps1
Test-Path -Path "C:\Temp\*.log" -PathType Leaf

此命令检查C:\Temp中是否存在任何.log文件。星号用作任何文件名的通配符。仅当至少有一个匹配项存在时,才会返回$true。

检查注册表路径

Test-Path可以验证注册表项是否存在。使用带注册表路径的-Path参数。注册表路径必须以注册表驱动器名称之一开头。这对于修改注册表设置的脚本很有用。

testpath4.ps1
Test-Path -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"

这会检查Windows CurrentVersion注册表项是否存在。HKLM:是HKEY_LOCAL_MACHINE的PowerShell驱动器。如果密钥存在,则cmdlet返回$true。

在条件中使用Test-Path

Test-Path通常在if语句中用于流程控制。布尔结果使其成为条件执行的理想选择。这种模式在需要先验证资源再执行操作的脚本中很常见。

testpath5.ps1
if (Test-Path -Path "C:\Reports\April.csv") {
    Write-Host "File exists, processing..."
} else {
    Write-Host "File not found, skipping..."
}

此脚本在尝试处理文件之前检查该文件。if语句根据文件的存在执行不同的代码块。这可以防止由于缺少文件而导致的错误。

检查多个路径

您可以通过将多个路径管道传输到Test-Path来一次测试多个路径。每个路径都会独立评估。结果将作为布尔值数组返回。这对于批量验证很有效。

testpath6.ps1
"C:\Windows", "C:\NonExistent" | Test-Path

此命令同时检查两个路径。对于存在的路径,输出为$true,对于不存在的路径,输出为$false。每个路径的结果对应于其在输入数组中的位置。

检查带通配符的路径

Test-Path支持通配符以进行灵活的路径匹配。星号(*)匹配任何字符,问号(?)匹配单个字符。这允许测试模式而不是精确路径。

testpath7.ps1
Test-Path -Path "C:\Users\*\Documents\*.docx"

这会检查用户是否在其Documents文件夹中有Word文档。通配符匹配任何用户名和任何.docx文件。仅当有一个匹配项时,才会返回$true。

来源

PowerShell 文档

在本文中,我们介绍了PowerShell中的Test-Path cmdlet。

作者

我的名字是Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自2007年以来一直在撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PowerShell 教程