Test-Path
确定路径的所有元素是否存在。
语法
Test-Path
[-Path] <string[]>
[-Filter <string>]
[-Include <string[]>]
[-Exclude <string[]>]
[-PathType <TestPathType>]
[-IsValid]
[-Credential <pscredential>]
[-UseTransaction]
[-OlderThan <datetime>]
[-NewerThan <datetime>]
[<CommonParameters>]
Test-Path
-LiteralPath <string[]>
[-Filter <string>]
[-Include <string[]>]
[-Exclude <string[]>]
[-PathType <TestPathType>]
[-IsValid]
[-Credential <pscredential>]
[-UseTransaction]
[-OlderThan <datetime>]
[-NewerThan <datetime>]
[<CommonParameters>]
Test-Path
[-Path] <string[]>
[-Filter <string>]
[-Include <string[]>]
[-Exclude <string[]>]
[-PathType <TestPathType>]
[-IsValid]
[-Credential <pscredential>]
[-UseTransaction]
[<CommonParameters>]
Test-Path
-LiteralPath <string[]>
[-Filter <string>]
[-Include <string[]>]
[-Exclude <string[]>]
[-PathType <TestPathType>]
[-IsValid]
[-Credential <pscredential>]
[-UseTransaction]
[<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
此命令检查 Commercial Buildings 目录中是否存在除 .dwg 文件以外的任何文件。
此命令使用 Path 参数来指定路径。 由于路径包含空格,因此路径用引号引起来。 该路径末尾的星号指示 Commercial Building 目录的内容。 使用类似此路径的长路径时,应键入路径的前几个字母,然后使用 TAB 键完成路径。
该命令指定要 从计算中省略的文件的 Exclude 参数。
在本例中,因为该目录仅包含 .dwg 文件,所以结果为 $false
。
示例 4:检查文件
Test-Path -Path $profile -PathType leaf
True
此命令检查 $profile
变量中所存储的路径是否指向文件。 在本例中,因为 PowerShell 配置文件是一个 .ps1
文件,所以该 cmdlet 返回 $true
。
示例 5:检查注册表中的路径
这些命令将 Test-Path
与 PowerShell 注册表提供程序配合使用。
第一个命令测试系统上 Microsoft.PowerShell 注册表项的注册表路径是否正确。 如果 PowerShell 安装正确,则该 cmdlet 将返回 $true
。
重要
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 动态参数来确定计算机上的文件是否 PowerShell.exe
大于 July 13, 2009
。
NewerThan 参数仅适用于文件系统驱动器。
Test-Path $pshome\PowerShell.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 参数提供空格字符串时,它将返回 $true
。 提供空字符串时,Test-Path
会返回错误。 以下示例显示空格和空字符串。
Test-Path ' '
Test-Path ''
True
Test-Path : Cannot bind argument to parameter 'Path' because it is an empty string.
At line:1 char:11
+ Test-Path ''
+ ~~
+ CategoryInfo : InvalidData: (:) [Test-Path], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.TestPathCommand
示例 9:测试可能具有无效驱动器的路径
测试包含驱动器规范的路径时,如果驱动器不存在,测试路径的有效性将失败。 可以使用提供程序名称为驱动器添加前缀,以解决此问题。
Test-Path -IsValid Z:\abc.txt
Test-Path -IsValid FileSystem::Z:\abc.txt
False
True
参数
-Credential
注意
随同 PowerShell 一起安装的任何提供程序都不支持此参数。 若要模拟其他用户,或在运行此 cmdlet 时提升凭据,请使用 Invoke-Command。
类型: | PSCredential |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Exclude
指定此 cmdlet 省略的项。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt
。 允许使用通配符。
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-Filter
以提供程序的格式或语言指定筛选器。 此参数值使 Path 参数有效。 筛选器的语法(包括通配符字符的使用),具体取决于提供程序。 筛选器比其他参数更有效,因为提供程序在检索对象时应用它们,而不是在检索对象后让 PowerShell 筛选对象。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-Include
指定此 cmdlet 测试的路径。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt
。 允许使用通配符。
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-IsValid
指示此 cmdlet 测试路径的语法,无论路径的元素是否存在。 如果路径语法有效且$false
无效,则返回$true
此 cmdlet。 如果所测试的路径包括驱动器规范,则 cmdlet 在驱动器不存在时返回 false。 PowerShell 返回 false,因为它不知道要测试哪个驱动器提供程序。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-LiteralPath
指定要测试的路径。 与 Path 不同,LiteralPath 参数的值严格按照所键入的形式使用。 不会将任何字符解释为通配字符。 如果路径包含可由 PowerShell 解释为转义序列的字符,则必须将路径括在单引号中,以便它们不会被解释。
类型: | String[] |
别名: | PSPath |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-NewerThan
这是 FileSystem 提供程序提供的动态参数。
将时间指定为 DateTime 对象。
在 PowerShell 7.5 之前,cmdlet 将忽略:
- 将 PathType 指定为除 .之外
Any
的任何值时,此参数。 - 与此参数一起使用时, OlderThan 参数。
- 当 Path 指向目录时此参数。
从 PowerShell 7.5 开始,可以将此参数与 PathType 参数的任何值一起使用,以使用 OlderThan 参数测试日期范围,以及测试目录的年龄。
有关详细信息,请参阅 about_FileSystem_Provider。
类型: | Nullable<T>[[DateTime]] |
Position: | Named |
默认值: | None |
必需: | 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]] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Path
指定要测试的路径。 允许使用通配符。 如果路径包括空格,请将其括在引号中。
类型: | String[] |
Position: | 0 |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | True |
-PathType
指定路径中最终元素的类型。 此 cmdlet 返回 $true
该元素是否为指定类型( $false
如果不是)。 此参数的可接受值为:
Container
- 包含其他元素的元素,例如目录或注册表项。Leaf
- 不包含其他元素(如文件)的元素。Any
- 容器或叶。
指示路径中的最后一个元素是否为特定类型。
注意
在 PowerShell 版本 6.1.2 之前,当同时指定 IsValid 和 PathType 开关时,Test-Path
cmdlet 将忽略 PathType 开关,并且仅验证语法路径而不验证路径类型。
根据 问题 #8607,修复此行为可能是未来版本中的中断性变更,其中 IsValid 和 PathType 开关属于单独的参数集,因此无法一起使用以避免这种混淆。
类型: | TestPathType |
别名: | Type |
接受的值: | Any, Container, Leaf |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-UseTransaction
在活动事务中使用该命令。 仅当正在执行事务时,此参数才有效。 有关详细信息,请参阅 about_Transactions
类型: | SwitchParameter |
别名: | usetx |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
可以通过管道将包含路径(但不是文本路径)的字符串传递给此 cmdlet。
输出
该 cmdlet 返回布尔值。
备注
包含 Path 名词(Path cmdlet)的 cmdlet 使用路径,并返回所有 PowerShell 提供程序可以解释的简洁格式的名称。 这些 cmdlet 用于需要在其中以特定格式显示全部或部分路径的程序或脚本中。 像使用 Dirname、Normpath、Realpath、Join 或其他路径操作程序一样使用它们。
Test-Path
旨在处理任何提供程序公开的数据。 若要列出会话中可用的提供程序,请键入 Get-PSProvider
。 有关详细信息,请参阅 about_Providers。