如何使用包含正则表达式的Test-Path

时间:2018-12-14 11:27:26

标签: powershell

我想检查文件Test.txt是否存在于特定目录(文件夹名称为16位)中。

例如,我尝试使用以下命令:

Test-Path "C:\Users\<USERNAME>\Desktop\Test\([0-9]{16})\Test.txt"

以下情况无法使用以下命令。

 Test-Path "C:\Users\<USERNAME>\Desktop\Test\*\Test.txt"

谢谢!

2 个答案:

答案 0 :(得分:2)

这将是这样做的一种方式:

# This is for PowerShell version 3.0 and up. If you are using an older version, use
# Get-ChildItem -Path "C:\Users\<USERNAME>\Desktop\Test" | Where-Object { $_.PSIsContainer -and $_.Name -match '\d{16}' }

Get-ChildItem -Path "C:\Users\<USERNAME>\Desktop\Test" -Directory | Where-Object { $_.Name -match '\d{16}' } | 
    ForEach-Object {
        $fileName = Join-Path -Path $_.FullName -ChildPath 'Test.txt'
        if (Test-Path -Path $fileName -PathType Leaf) {
            Write-Host "$fileName exists"
        }
        else {
            Write-Host "$fileName does not exist"
        }
    }

答案 1 :(得分:1)

Test-Path将返回$ True / $ False,以实现可以执行的类似操作:

((Get-ChildItem "C:\Users\<USERNAME>\Desktop\Test\*\Test.txt" | 
    where FullName -match "\\Test\\\d{16}\\Test.txt$").Count -gt 0)

但这不会显示匹配的文件夹。