Question Recherche Texte et le remplacer depuis une liste csv

Plus d'informations
il y a 2 ans 6 mois #31388 par africanism78
Bonjour a tous,

je débute en powershell

j'essais de trouve comment liez une liste de mot (csv) a chercher dans plusieurs fichier et les remplacer par ceux dans cette meme Liste.

en gros j'essais de le faire chercher dans tous les fichier le texte OldNameServer1 et de le remplacer par NewNameServer1
je pense que c'est faisable mais je ne sais pas comment joindre le Foreach a mon Select-String -replace.

j'avoue que je suis perdu.

Mon csv
Old,New
OldNameServer1,NewNameServer1
OldNameServer2,NewNameServer2

Merci a vous si vous pouvez m'aiguillé

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 6 mois #31390 par Arnaud Petitjean
Hello Africanism du 78 ! ;-)


Chaque chose en son temps. Commençons déjà par remplacer un mot par un autre dans un fichier.

Pour se faire, l'opérateur -Replace est parfait. Tu n'as pas besoin de Select-String.
Petit exemple : 
# Chargement du contenu d'un fichier texte dans une variable.
# $file sera donc un tableau de chaines de caractères
$file = Get-Content C:\temp\myFile.txt

# Remplacement d'un mot par un autre dans un tableau de chaine de caractères
$file -Replace 'chaine de recherche', 'chaine de remplacement'

Est-ce que cela a du sens pour toi ?

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 6 mois #31391 par africanism78
salut, et merci pour ta réponse
oui j'avais déjà vue, le soucis c'est que je doit modifier plusieurs fichiers sans les connaitre , je sais ou ils ce trouve mais je me voit mal écrire le nom de chaque fichier et dire ce que je doit remplacer.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 6 mois - il y a 2 ans 6 mois #31392 par africanism78
avec cette commande je voit bien les fichier qui contienne mes mots cle
Select-String -Path E:\TEST\* -pattern "test1"
 
Dernière édition: il y a 2 ans 6 mois par africanism78.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 6 mois #31394 par ericlm128
Je ferait comme ceci en imaginant que ton fichier csv se trouve dans le dossier "C:\test"
$files = Get-ChildItem -Path "C:\test\*.txt"
$csv = Import-Csv -LiteralPath "C:\test\test.csv" -Encoding UTF8 -Delimiter ","

foreach($file in $files)
{
    $newcontent = $content = $file | Get-Content -Raw

    foreach($item in $csv)
    {
        $newcontent = $newcontent -replace $item.Old, $item.New
    }

    if($content -ne $newcontent)
    {
        Set-Content -LiteralPath $file.FullName -Value $newcontent
    }
}

PS : Encodage des fichiers à surveiller (txt et csv), si il y a de la divergence ca compliquera le code
Les utilisateur(s) suivant ont remercié: africanism78

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 6 mois - il y a 2 ans 6 mois #31396 par africanism78
Merci

j'ai adapté pour qui recherche dans tous les fichiers.
$files = Get-ChildItem -Path "E:\TEST\*.*" -Recurse
$csv = Import-Csv -LiteralPath "E:\data.csv" -Encoding UTF8 -Delimiter ","

foreach($file in $files)
{
    $newcontent = $content = $file | Get-Content -Raw

    foreach($item in $csv)
    {
        $newcontent = $newcontent -replace $item.Old, $item.New
    }

    if($content -ne $newcontent)
    {
        Set-Content -LiteralPath $file.FullName -Value $newcontent
    }
} 
Dernière édition: il y a 2 ans 6 mois par africanism78.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.079 secondes
Propulsé par Kunena