共用方式為


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>]

Description

Test-Path Cmdlet 會判斷路徑的所有專案是否存在。 如果所有元素都存在,且遺漏任何專案,則會傳 $True$False。 它也可以判斷路徑語法是否有效,以及路徑是否導致容器或終端機或分葉專案。 如果 Path 為空格符,則會傳回 $False。 如果 Path 是空字串,$null$null 陣列或空陣列陣列,則會傳回非終止錯誤。

範例

範例 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

重要

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” 檔案是否比 2009 年 7 月 13 日更新。

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 參數時,它會傳回 false。 下列範例顯示空格元和空字串。

Test-Path ' '
Test-Path ''

False
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

參數

-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 都會測試路徑的語法。 如果路徑語法有效,則此 Cmdlet 會傳回 $True,如果路徑語法無效,則傳回 $False

類型:SwitchParameter
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-LiteralPath

指定要測試的路徑。 不同於 PathLiteralPath 參數的值會與輸入時完全相同。 不會將任何字元解譯為通配符。 如果路徑包含逸出字元,請以單引弧括住它。 單引號會告知PowerShell不要將任何字元解譯為逸出序列。

類型:String[]
別名:PSPath
Position:Named
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:False

-NewerThan

將時間指定為 DateTime 物件。

類型:DateTime
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-OlderThan

將時間指定為 DateTime 物件。

類型:DateTime
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Path

指定要測試的路徑。 允許通配符。 如果路徑包含空格,請以引號括住它。

類型:String[]
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:True

-PathType

指定路徑中最後一個項目的類型。 如果專案為指定的型別,且未指定,則此 Cmdlet 會傳回 $True$False。 此參數可接受的值為:

  • 容器。 包含其他項目的專案,例如目錄或登錄機碼。
  • 葉。 不包含其他項目的專案,例如檔案。
  • 任何。 容器或分葉。

指出路徑中的最終專案是否為特定類型。

謹慎

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

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

類型:TestPathType
別名:Type
接受的值:Any, Container, Leaf
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-UseTransaction

在作用中交易中包含 命令。 只有在交易進行中時,此參數才有效。 如需詳細資訊,請參閱 about_Transactions

類型:SwitchParameter
別名:usetx
Position:Named
預設值:False
必要:False
接受管線輸入:False
接受萬用字元:False

輸入

String

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

輸出

Boolean

Cmdlet 會傳回 布爾值 值。

備註

包含 Path 名詞的 Cmdlet(Path Cmdlet) 會使用路徑名稱,並以簡潔的格式傳回所有 PowerShell 提供者可以解譯的名稱。 其設計用於您想要以特定格式顯示路徑名稱的所有或部分的程式和腳本中。 使用它們,因為您會使用 DirnameNormpathRealpathJoin或其他路徑操作工具。

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