特定のフォルダーの下にある、少なくとも 1 つの大文字を含むすべてのフォルダーを検索します。
これまで、この Power Shell でいろいろ試してきました:
Get-ChildItem -Recurse
| ?{ $_.PSIsContainer }
| Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
| Select-Object FullName
しかし、名前のどこにでも大文字が含まれているすべてのフォルダーがリストされるという点で失敗します。サブフォルダーのみをrefs
リストしたいのです。
エラーはどこにありますか? 正規表現テスト エンジンで正規表現を試すと、 のサブフォルダーのみが正しくリストされますrefs
。どうやら、Power Shell エンジンは異なる動作をするようです。
答え1
確かに奇妙です。-Match
正規表現の内容に関係なく、演算子は大文字と小文字を区別しないようです (または、別の説明があるかもしれません)。
ただし、 (大文字と小文字を区別する一致)-Match
に変更すると-CMatch
、ma サンプル ディレクトリでは機能するようです。
Get-ChildItem -Recurse -Directory | Where-Object FullName -CMatch "^.*?refs\\.*[A-Z]+.*$" | select Fullname
[regex]
より詳細な制御のために、型アクセラレータを使用することもできます。
$regex = [regex]"^.*?refs\\.*[A-Z]+.*$"
$match = $regex.Match('C:\Users\user\refs\whatever\test1\test2\test3')