[PowerShell] Récupérer le nom d'un fichier avec Caractère Spécial

Récupérer le nom d'un fichier avec Caractère Spécial [PowerShell] - Shell/Batch - Programmation

Marsh Posté le 07-12-2011 à 15:57:28    

Bonjour,
 
je cherche le moyen de récupérer le nom d'un fichier dans un répertoire de près de 50 000 fichiers, qui contient un caractere spécial sur une balise d'un fichier XML:
 
<numeroServiceMateriel>?????????????</numeroServiceMateriel></course>
 
j'ai trouvé qu'avec  
 
get-content d:\*.*| where {$_ -notmatch "\w"}
 
je récupérais bien la ligne des fichiers qui ont un caractère spécial, mais je voudrais récupérer le nom de ce fichier.
 
si quelqu'un peut m'aider.

Reply

Marsh Posté le 07-12-2011 à 15:57:28   

Reply

Marsh Posté le 08-12-2011 à 19:48:16    

Je ne sais pas si j'ai bien saisi ce que tu veux.
Ce que j'ai compris: Tu veux récupérer le nom du fichier qui est lu et qui contient une certaine ligne:
Voici ce que je te propose:

$listefichiers= @(Get-ChildItem d:\*.*)
foreach ($fichier in $listefichiers) {
 $contenu = Get-Content $fichier
 if ($contenu -notmatch "\w" ){write $fichier}
 }


 
 
Bien sur à toi d'adapter la condition. Si tu trouve un code plus élégant, n'hésites pas à le soumettre à sa suite.


Message édité par macfennec le 08-12-2011 à 20:17:27

---------------
ΞvΞ online player | Topic hfr eve-online
Reply

Marsh Posté le 09-12-2011 à 11:29:46    

Merci MacFennec, dans l'intervalle j'ai trouvé un script dans l'esprit de ce que tu m'as suggéré. je le donne pour info, j'ai rajouté une variable pour le nombre de fichiers avec caractère spécial et une autre pour le nombre de fichiers parcourus  :
 
$i=0
$j=0
foreach ($file in Get-childitem -recurse "d:\temp" -exclude "th*" )
{if (Get-Content $file|where {$_ -match "<numeroServiceMateriel>....[^a-z]</numeroServiceMateriel></course>"})
    {
    write-host $file
    $i=$i+1
    }$j=$j+1
    } write-host $i
    write-host $j
 
Par contre je n'arrive pas à trouver la syntaxe pour exclure un répertoire contenant *th* par exemple..

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed