Select-String
fonctionne sur lignes individuelles des fichiers d'entrée par défaut, et que ces lignes ne contiennent pas la nouvelle ligne Sequ à leur fin, il ne peut pas être égalé. En d'autres termes, les séquences de retour à la ligne (sauts de ligne) ont été déshabillées par défaut au moment où l'expression régulière spécifiée (-Pattern
) est comparée à chaque ligne d'entrée.
Vous devez lire chaque fichier d'entrée comme ensemble afin de faire correspondre ses séquences de saut de ligne, qui Get-Content -Raw
(PSV3 +) vous permet de faire:
Get-ChildItem -Recurse -File | ForEach-Object {
if (Get-Content -Raw $_.FullName | Select-String -Quiet '\r') { $_.Name }
}
Select-String -Quiet
arrêts au 1er match le cas échéant et renvoie un booléen indiquant si une correspondance a été trouvée ou non.
Notez la nécessité de passer $_.FullName
plutôt que simplement $_
à Get-Content -Raw
pour vous assurer que les fichiers qui ne sont pas dans le répertoire en cours sont également traités correctement.
La raison est que $_
, en dépit d'être un objet qui transporte une information complète de chemin, est lié comme une chaîne au paramètre de -Path
Get-Content
, et cette chaîne est le seul fichier nom, sans informations de chemin.
Ceci est un known pitfall.