特定のフォルダの下にある大文字を含むすべてのフォルダを検索します

特定のフォルダの下にある大文字を含むすべてのフォルダを検索します

特定のフォルダーの下にある、少なくとも 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')

関連情報