Test-Path

确定路径的所有元素是否存在。

语法

Path (Default) - FileSystem provider

Test-Path
    [-Path] <String[]>
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-PathType <TestPathType>]
    [-IsValid]
    [-Credential <PSCredential>]
    [-OlderThan <DateTime>]
    [-NewerThan <DateTime>]
    [<CommonParameters>]

LiteralPath - FileSystem provider

Test-Path
    -LiteralPath <String[]>
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-PathType <TestPathType>]
    [-IsValid]
    [-Credential <PSCredential>]
    [-OlderThan <DateTime>]
    [-NewerThan <DateTime>]
    [<CommonParameters>]

Path (Default) - All providers

Test-Path
    [-Path] <string[]>
    [-Filter <string>]
    [-Include <string[]>]
    [-Exclude <string[]>]
    [-PathType <TestPathType>]
    [-IsValid]
    [-Credential <pscredential>]
    [<CommonParameters>]

LiteralPath - All providers

Test-Path
    -LiteralPath <string[]>
    [-Filter <string>]
    [-Include <string[]>]
    [-Exclude <string[]>]
    [-PathType <TestPathType>]
    [-IsValid]
    [-Credential <pscredential>]
    [<CommonParameters>]

说明

Test-Path cmdlet 确定路径的所有元素是否存在。 如果所有元素都存在并且$true缺少任何元素,则返回$false它。 它还可以判断路径语法是否有效,以及路径是否导致容器或终端或叶元素。 如果 Path 是空格或空字符串,则 cmdlet 返回 $false。 如果 Path$null、数组 $null 或空数组,则 cmdlet 将返回非终止错误。

示例

示例 1:测试路径

Test-Path -Path "C:\Documents and Settings\DavidC"
True

此命令检查路径中的所有元素是否存在,包括 C: 目录、 Documents and Settings 目录和 DavidC 目录。 如果缺少任何内容,则 cmdlet 返回 $false。 否则,它将返回 $true

示例 2:测试配置文件的路径

Test-Path -Path $PROFILE
False
Test-Path -Path $PROFILE -IsValid
True

这些命令测试 PowerShell 配置文件的路径。

第一个命令确定路径中的所有元素是否存在。 第二个命令确定路径的语法是否正确。 在这种情况下,路径是 $false,但语法正确 $true。 这些命令使用 $PROFILE,即指向配置文件位置的自动变量,即使配置文件不存在也是如此。

有关自动变量的详细信息,请参阅 about_Automatic_Variables

示例 3:检查指定类型之外是否有任何文件

Test-Path -Path "C:\CAD\Commercial Buildings\*" -Exclude *.dwg
False

此命令检查商业建筑目录中是否有除.dwg文件以外的任何文件。

该命令使用 Path 参数指定路径。 由于路径包含空格,因此路径用引号引起来。 路径末尾的星号指示商业建筑目录的内容。 使用长路径(如此路径)键入路径的前几个字母,然后使用 TAB 键完成路径。

该命令指定要从计算中省略的文件的 Exclude 参数。

在这种情况下,由于目录仅包含.dwg文件,因此结果是 $false

示例 4:检查文件

Test-Path -Path $PROFILE -PathType Leaf
True

此命令检查变量中 $PROFILE 存储的路径是否会导致文件。 在这种情况下,由于 PowerShell 配置文件是一个 .ps1 文件,因此 cmdlet 返回 $true

示例 5:检查注册表中的路径

这些命令与 PowerShell 注册表提供程序一起使用 Test-Path

第一个命令测试 Microsoft 的注册表路径。PowerShell 系统上的注册表项正确。 如果正确安装了 PowerShell,则 cmdlet 将 $true返回 。

Important

Test-Path 不适用于所有 PowerShell 提供程序。 例如,可以使用 Test-Path 它测试注册表项的路径,但如果使用它来测试注册表项的路径,它始终返回 $false,即使存在注册表项也是如此。

Test-Path -Path "HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
True
Test-Path -Path "HKLM:\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell\ExecutionPolicy"
False

示例 6:测试文件是否大于指定日期

此命令使用 NewerThan 动态参数来确定计算机上的文件是否 pwsh.exe 大于 July 13, 2009

NewerThan 参数仅适用于文件系统驱动器。

Test-Path $PSHOME\pwsh.exe -NewerThan "July 13, 2009"
True

示例 7:测试值为 null 的路径

null、数组或空数组 null 返回的错误是非终止错误。 它可以通过使用 -ErrorAction SilentlyContinue. 以下示例显示了返回 NullPathNotPermitted 错误的所有情况。

Test-Path $null
Test-Path $null, $null
Test-Path @()
Test-Path : Cannot bind argument to parameter 'Path' because it is null.
At line:1 char:11
+ Test-Path $null
+           ~~~~~
    + CategoryInfo          : InvalidData: (:) [Test-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand

示例 8:使用空格作为值测试路径

Path 参数提供空格字符串时,它将返回 $false。 这是Windows PowerShell 5.1 的更改。 提供空字符串时, Test-Path 返回错误。 以下示例显示空格和空字符串。

Test-Path ' '
Test-Path ''
False
False

示例 9:测试可能具有无效驱动器的路径

测试包含驱动器规范的路径时,如果驱动器不存在,测试路径的有效性将失败。 可以使用提供程序名称为驱动器添加前缀,以解决此问题。

Test-Path -IsValid Z:\abc.txt
Test-Path -IsValid FileSystem::Z:\abc.txt
False
True

参数

-Credential

Note

任何随 PowerShell 一起安装的提供程序都不支持此参数。 要模拟其他用户,或在运行此 cmdlet 时提升凭据,请使用 Invoke-Command

参数属性

类型:PSCredential
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-Exclude

指定此 cmdlet 省略的项。 此参数的值定义了 Path 参数的限定条件。 输入路径元素或模式,例如 *.txt。 允许使用通配符。

参数属性

类型:

String[]

默认值:None
支持通配符:True
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Filter

以提供程序的格式或语言指定筛选器。 此参数的值定义了 Path 参数的限定条件。 筛选器的语法(包括通配符的使用)取决于提供程序。 筛选器比其他参数更有效,因为提供程序在检索对象时应用它们,而不是在检索对象后让 PowerShell 筛选对象。

参数属性

类型:String
默认值:None
支持通配符:True
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Include

指定此 cmdlet 测试的路径。 此参数的值定义了 Path 参数的限定条件。 输入路径元素或模式,例如 *.txt。 允许使用通配符。

参数属性

类型:

String[]

默认值:None
支持通配符:True
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-IsValid

指示此 cmdlet 测试路径的语法,无论路径的元素是否存在。 如果路径语法有效且$true无效,则返回$false此 cmdlet。 如果所测试的路径包括驱动器规范,则 cmdlet 在驱动器不存在时返回 false。 PowerShell 返回 false,因为它不知道要测试哪个驱动器提供程序。

Note

.NET 2.1 中引入了路径 API 中的中断性变更。 这些方法不再检查无效的路径字符。 此更改导致 PowerShell 中的回归, 其中 IsValid 检查不再测试无效字符。 将在将来的版本中解决回归问题。 有关详细信息,请参阅 .NET Core 2.10>中断性变更。

参数属性

类型:SwitchParameter
默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-LiteralPath

指定要测试的路径。 与 Path不同,LiteralPath 参数的值按输入原样使用。 不会将任何字符解释为通配字符。 如果路径包含可由 PowerShell 解释为转义序列的字符,则必须将路径括在单引号中,以便它们不会被解释。

参数属性

类型:

String[]

默认值:None
支持通配符:False
不显示:False
别名:PSPath, Lp

参数集

LiteralPath
Position:Named
必需:True
来自管道的值:False
来自管道的值(按属性名称):True
来自剩余参数的值:False

-NewerThan

这是 FileSystem 提供程序提供的动态参数。

将时间指定为 DateTime 对象。

在 PowerShell 7.5 之前,cmdlet 将忽略:

  • PathType 指定为除 .之外 Any的任何值时,此参数。
  • 与此参数一起使用时, OlderThan 参数。
  • 当 Path 指向目录时此参数。

从 PowerShell 7.5 开始,可以将此参数与 PathType 参数的任何值一起使用,以使用 OlderThan 参数测试日期范围,以及测试目录的年龄。

有关详细信息,请参阅 about_FileSystem_Provider

参数属性

类型:

Nullable<T>[[DateTime]]

默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-OlderThan

这是 FileSystem 提供程序提供的动态参数。

将时间指定为 DateTime 对象。

在 PowerShell 7.5 之前,cmdlet 将忽略:

  • PathType 指定为除 .之外 Any的任何值时,此参数。
  • NewerThan 参数一起使用时,此参数。
  • 当 Path 指向目录时此参数。

从 PowerShell 7.5 开始,可以将此参数与 PathType 参数的任何值一起使用,以使用 NewerThan 参数测试日期范围,以及测试目录的年龄。

有关详细信息,请参阅 about_FileSystem_Provider

参数属性

类型:

Nullable<T>[[DateTime]]

默认值:None
支持通配符:False
不显示:False

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

-Path

指定要测试的路径。 允许使用通配符。 如果路径包含空格,请将它括在引号中。

参数属性

类型:

String[]

默认值:None
支持通配符:True
不显示:False

参数集

Path
Position:0
必需:True
来自管道的值:True
来自管道的值(按属性名称):True
来自剩余参数的值:False

-PathType

指定路径中最终元素的类型。 此 cmdlet 返回 $true 该元素是否为指定类型( $false 如果不是)。 此参数的可接受值为:

  • Container - 包含其他元素的元素,例如目录或注册表项。
  • Leaf - 不包含其他元素(如文件)的元素。
  • Any - 容器或叶。

指示路径中的最终元素是否为特定类型。

Caution

最多在 PowerShell 版本 6.1.2 中同时指定 IsValidPathType 开关时, Test-Path cmdlet 将忽略 PathType 开关,并且仅验证语法路径而不验证路径类型。

根据 问题 #8607,修复此行为可能是未来版本中的中断性变更, 其中 IsValidPathType 开关属于单独的参数集,因此无法一起使用以避免这种混淆。

参数属性

类型:TestPathType
默认值:None
接受的值:Any, Container, Leaf
支持通配符:False
不显示:False
别名:类型

参数集

(All)
Position:Named
必需:False
来自管道的值:False
来自管道的值(按属性名称):False
来自剩余参数的值:False

CommonParameters

此 cmdlet 支持通用参数:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 有关详细信息,请参阅 about_CommonParameters

输入

String

可以通过管道将包含路径(但不是文本路径)的字符串传递给此 cmdlet。

输出

Boolean

该 cmdlet 返回 布尔 值。

备注

包含 Path 名词( Path cmdlet)的 cmdlet 使用路径,并返回所有 PowerShell 提供程序可以解释的简洁格式的名称。 它们旨在用于要以特定格式显示路径的所有或部分的程序和脚本。 像使用 DirnameNormpathRealpathJoin 或其他路径操控器一样使用它们。

设计 Test-Path 用于处理任何提供程序公开的数据。 若要列出会话中可用的提供程序,请键入 Get-PSProvider。 有关详细信息,请参阅 about_Providers