Periksa apakah wildcard mencakup jalur yang diberikan dalam PowerShell

1

Saya mencoba mencari cara untuk menguji di PowerShell jika wildcard dalam notasi baris perintah akan dipicu untuk jalur yang diberikan. Agar jelas saya memiliki sesuatu seperti ini:

For ($exception in $Exceptions) {
    For ($path in $ListOfAllItems) {
        If (IsPartOfPath -Wildcard $exception -Path $path) {
            -- do something....
        }
    }
}

Masalah yang saya alami adalah bagaimana mengimplementasikan IsPartOfPathfungsi ini . Saya telah mencoba yang sederhana $path -imatch $wildcardtetapi tidak menyukai hasilnya, karena jatuh ke dalam sintaks RegEx penuh. Apakah ada cara mewah di PS untuk melakukannya selain menulis semua cek wildcard sendiri?

Gagasan untuk menyelesaikannya adalah dengan mendapatkan jalur sumber daya yang $pathmerujuk dan memeriksa apakah $exceptionmengacu pada sumber daya yang sama. Namun saya tidak tahu apakah itu mungkin di PowerShell: /

SOReader
sumber

Jawaban:

0

The -likeoperator adalah mungkin apa yang Anda harapkan. Itu tidak melakukan perbandingan regex, dan bekerja dengan *dan ?persis seperti yang Anda harapkan. Itu case-sensitive.

Sayangnya, ia memang memiliki beberapa fitur tambahan: #cocok dengan angka dan pengaturan kurung siku seperti [abc]mencocokkan salah satu karakter di dalam tanda kurung. Tampaknya memiliki semua semantik yang sama dengan Get-ChildItemfilter dan Likeoperator VB.NET .

Jika itu bermasalah, Anda dapat keluar dari karakter wildcard yang tidak diinginkan sebelum menggunakan -like:

$path -like ($wildcard.Replace('[', '[[]').Replace('#', '[#]'))
Ben N
sumber