Trova tutte le cartelle contenenti lettere maiuscole sotto una determinata cartella


2

Voglio trovare tutte le cartelle che contengono almeno una lettera maiuscola e che si trovano sotto una determinata cartella.

Finora ho giocato con questo power shell:

Get-ChildItem -Recurse
    | ?{ $_.PSIsContainer }
    | Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
    | Select-Object FullName

Ma non riesce in quanto elenca TUTTE le cartelle che contengono lettere maiuscole OVUNQUE nel loro nome. Voglio solo le sottocartelle refsda elencare.

Dov'è il mio errore? Quando provo il regex in un motore di test regex, elenca correttamente solo le sottocartelle di refs. Apparentemente il motore Power Shell funziona in modo diverso?


Potresti fornire nomi di directory di esempio per la corrispondenza?
WeatherForecasting del

Risposte:


3

È davvero strano. Sembra che l' -Matchoperatore non si occuperà del caso indipendentemente da ciò che è in regex (o forse c'è una spiegazione diversa).

Tuttavia, il passaggio -Matcha -CMatch(corrispondenza con distinzione tra maiuscole e minuscole) sembra funzionare per la directory di esempio ma:

Get-ChildItem -Recurse -Directory | Where-Object FullName -CMatch "^.*?refs\\.*[A-Z]+.*$" | select Fullname

È inoltre possibile utilizzare l' [regex]acceleratore di tipo per un maggiore controllo.

$regex = [regex]"^.*?refs\\.*[A-Z]+.*$"
$match = $regex.Match('C:\Users\user\refs\whatever\test1\test2\test3')

Sì, cmatchfunziona perfettamente. Grazie per il suggerimento!
Florian Peschka,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.