ZetCode

PowerShell Test-Path

last modified February 15, 2025

In this article, we will cover the Test-Path cmdlet in PowerShell. This cmdlet checks if a path exists and returns True or False. It works with files, folders, and registry keys.

Test-Path basics

The Test-Path cmdlet determines if all elements of a path exist. It can test files, directories, and registry paths. The cmdlet returns $true if all elements exist, otherwise $false. It's useful for validation before file operations.

Basic Test-Path usage

The simplest way to use Test-Path is with a single path parameter. This checks if the specified file or folder exists. The cmdlet returns a boolean value. You can use the result in conditional statements.

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

This command checks if cmd.exe exists in System32. It returns $true if found, $false otherwise. The path must be exact for accurate results.

Check if a directory exists

Test-Path can verify directory existence by specifying the path. Use the -PathType parameter to explicitly check for directories. This prevents confusion with files that might have the same name. Directory paths should end with a backslash.

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

This checks if "C:\Program Files\" is a valid directory. The -PathType Container parameter ensures we're testing for a folder, not a file.

Check if a file exists

To specifically test for files, use -PathType Leaf. This distinguishes files from directories with similar names. Wildcards can be used for pattern matching. This is useful when checking for files with specific naming patterns.

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

This command checks if any .log files exist in C:\Temp. The asterisk acts as a wildcard for any filename. Only the existence of at least one match returns $true.

Check registry paths

Test-Path can verify registry key existence. Use the -Path parameter with a registry path. Registry paths must start with one of the registry drive names. This is useful for script that modify registry settings.

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

This checks if the Windows CurrentVersion registry key exists. HKLM: is the PowerShell drive for HKEY_LOCAL_MACHINE. The cmdlet returns $true if the key is present.

Using Test-Path in conditions

Test-Path is often used in if statements for flow control. The boolean result makes it ideal for conditional execution. This pattern is common in scripts that need to verify resources before operations.

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

This script checks for a file before attempting to process it. The if statement executes different code blocks based on the file's existence. This prevents errors from missing files.

Check multiple paths

You can test multiple paths at once by piping them to Test-Path. Each path is evaluated independently. The results are returned as an array of booleans. This is efficient for bulk verification.

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

This command checks two paths simultaneously. The output will be $true for existing paths and $false for missing ones. Each path's result corresponds to its position in the input array.

Check path with wildcards

Test-Path supports wildcards for flexible path matching. The asterisk (*) matches any characters, and the question mark (?) matches single characters. This allows testing for patterns rather than exact paths.

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

This checks if any user has Word documents in their Documents folder. The wildcards match any username and any .docx file. Only one match is needed for $true to be returned.

Source

PowerShell documentation

In this article, we have covered the Test-Path cmdlet in PowerShell.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all PowerShell tutorials.