Share via


Test-Path

判斷路徑的所有元素是否都存在。

Syntax

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

Description

Cmdlet Test-Path 會判斷路徑的所有專案是否存在。 如果所有專案都存在,而且$false遺漏任何專案,則會傳回 $true 。 它也可以判斷路徑語法是否有效,以及路徑是否導向容器或終端機或分葉專案。 如果 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 參數來指定路徑。 因為路徑包含空格,所以路徑會以引弧括住。 路徑尾端的星號會指示 Commercial Building 目錄的內容。 使用長路徑,例如這一個路徑,輸入路徑的前幾個字母,然後使用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回 。

重要

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

注意

任何隨 PowerShell 一起安裝的提供者都不支援此參數。 若要模擬其他使用者,或在執行此 Cmdlet 時提高您的認證,請使用 Invoke-Command

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Exclude

指定此 Cmdlet 省略的項目。 此參數的值會限定 Path 參數。 輸入路徑元素或模式,例如 *.txt。 允許使用萬用字元。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

以提供者的格式或語言指定篩選。 此參數的值會限定 Path 參數。 篩選的語法 (包括是否使用萬用字元) 取決於提供者。 篩選比其他參數更有效率,因為提供者在擷取物件時會套用它們,而不是在擷取對象之後讓PowerShell篩選物件。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

指定此 Cmdlet 測試的路徑。 此參數的值會限定 Path 參數。 輸入路徑元素或模式,例如 *.txt。 允許使用萬用字元。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-IsValid

指出不論路徑的專案是否存在,此 Cmdlet 都會測試路徑的語法。 如果路徑語法有效且$false不是,則此 Cmdlet 會傳回 $true 。 如果所測試的路徑包含磁碟驅動器規格,當磁碟驅動器不存在時,Cmdlet 會傳回 false。 PowerShell 會傳回 false,因為它不知道要測試哪一個磁碟驅動器提供者。

注意

在 .NET 2.1 中引進了路徑 API 的重大變更。 這些方法不再檢查無效的路徑字元。 這項變更會導致 PowerShell 中的回歸,其中 IsValid 檢查不再測試無效的字元。 回歸將在未來的版本中解決。 如需詳細資訊,請參閱 .NET Core 2.1 的重大變更

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

指定要測試的路徑。 與 Path 不同, LiteralPath 參數的值會與類型完全相同使用。 沒有字元會被視為萬用字元。 如果路徑包含PowerShell可解譯為逸出序列的字元,您必須以單引號括住路徑,才能解譯這些字元。

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NewerThan

這是 FileSystem 提供者提供的動態參數。

將時間指定為 DateTime 物件。

在 PowerShell 7.5 之前,Cmdlet 會忽略:

  • 當您將 PathType 指定為以外的 Any任何值時,此參數。
  • 搭配此參數使用時的 OlderThan 參數。
  • Path 指向目錄時,此參數。

從 PowerShell 7.5 開始,您可以使用此參數搭配 PathType 參數的任何值、使用 OlderThan 參數測試日期範圍,以及測試目錄的存留期。

如需詳細資訊,請參閱 about_FileSystem_Provider

Type:Nullable<T>[[DateTime]]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OlderThan

這是 FileSystem 提供者提供的動態參數。

將時間指定為 DateTime 物件。

在 PowerShell 7.5 之前,Cmdlet 會忽略:

  • 當您將 PathType 指定為以外的任何值時, Any此參數。
  • NewerThan 參數搭配使用時,此參數。
  • 當 Path 指向目錄時,此參數。

從 PowerShell 7.5 開始,您可以使用此參數搭配 PathType 參數的任何值、使用 NewerThan 參數測試日期範圍,以及測試目錄的存留期。

如需詳細資訊,請參閱 about_FileSystem_Provider

Type:Nullable<T>[[DateTime]]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

指定要測試的路徑。 允許使用萬用字元。 如果路徑包含空格,請將它括在引號中。

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-PathType

指定路徑中最後一個項目的類型。 如果專案是指定的型別,而且$false不是,這個 Cmdlet 會傳回 $true 。 此參數可接受的值為:

  • Container - 包含其他元素的專案,例如目錄或登錄機碼。
  • Leaf - 不包含其他元素的專案,例如檔案。
  • Any - 容器或分葉。

告知路徑中的最終元素是否為特定類型。

警告

一起指定IsValidPathType參數時,最多PowerShell 6.1.2版,Cmdlet 會忽略PathType參數,Test-Path而且只會驗證語法路徑,而不會驗證路徑類型。

根據 問題 #8607,修正此行為可能是未來版本的中斷性變更,其中 IsValidPathType 參數屬於不同的參數集,因此無法一起使用以避免這種混淆。

Type:TestPathType
Aliases:Type
Accepted values:Any, Container, Leaf
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

String

您可以使用管線將包含路徑 (但不是常值路徑) 的字串傳送至此 Cmdlet。

輸出

Boolean

Cmdlet 會傳回 布爾 值。

備註

包含 Path 名詞的 Cmdlet (Path Cmdlet) 使用 path,並以精簡格式傳回所有 PowerShell 提供者可以解譯的名稱。 其設計目的是要在您想要以特定格式顯示路徑的所有或部分的程式和腳本中使用。 使用它們,就像使用 DirnameNormpath、RealpathJoin 或其他路徑操作工具一樣。

Test-Path是設計來使用任何提供者所公開的數據。 若要列出工作階段中可用的提供者,請輸入 Get-PSProvider。 如需詳細資訊,請參閱 about_Providers