Question Remplacer texte de façon récursive

Plus d'informations
il y a 13 ans 5 mois #13248 par djedje68
Bonjour,

Nouveau sur PowerShell j'aimerai créer un petit script qui permet de modifier le contenu de fichiers dans plusieurs dossiers.

Exemple :
On a l'arborescence suivante :
C:\MonDir
C:\MonDir\Ressources
C:\MonDir\Config

Dans chaque répertoire nous avons des fichiers.

J'aimerai que mon script parcours de façon récursive les dossier pour remplacer une chaîne de caractère donnée par une autre. J'arrive à le faire de façon non récursive via la commande :


[code:1](get-content monFichier) | foreach-object {$_ -replace \"OLD\", \"NEW\"} | set-content monFichier[/code:1]

Pouvez-vous m'aider svp ?

D'avance merci,

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

Plus d'informations
il y a 13 ans 5 mois #13249 par xyz
Réponse de xyz sur le sujet Re:Remplacer texte de façon récursive
Salut,
djedje68 écrit:

J'aimerai que mon script parcours de façon récursive les dossier pour remplacer une chaîne de caractère donnée par une autre.

Dans ces cas là, procéde étape par étape.
Cherche déjà comment récupérer tous les fichiers.

Restera à combiner les deux (ton code existant et le code de recherche récursive), le pipeline ne se sera peut être la solution la plus facile, car le fichier lut doit également être accessible en écriture, une étape intermédiaire sera nécessaire.

Il est possible d'utiliser le pipeline dans l'instruction Foreach( ... ), à ne pas confondre avec l'alias du cmdlet Foreach-Object, voir la doc pour plus de détails.

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 5 mois #13257 par djedje68
Bonjour,

Tout d'abord merci pour ta réponse!

Alors récupérer la liste de tous les fichiers, j'y arrive grâce à Get-ChildItem -recurse mais c'est combiner les deux... La je suis totalement perdu :/

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

Plus d'informations
il y a 13 ans 5 mois #13259 par xyz
Réponse de xyz sur le sujet Re:Remplacer texte de façon récursive
Communique-nous tes deux lignes à fusionner.

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 5 mois #13262 par djedje68
Alors, j'arrive à lister tous les fichiers d'une arborescence via la commande Get-ChildItem MonDirectory -recurse

Et j'arrive à remplacer le contenu d'un fichier via la commande :
[code:1](get-content monFichier) | foreach-object {$_ -replace \"OLD\", \"NEW\"} | set-content monFichier[/code:1]

Mais je n'arrive pas à remplacer le contenu de tous les fichiers listés par la commande Get-ChildItem...

Merci,

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

Plus d'informations
il y a 13 ans 5 mois #13266 par xyz
Réponse de xyz sur le sujet Re:Remplacer texte de façon récursive
Une solution :
[code:1]
$Path=\"c:\temp\test\"

Foreach ($File in Get-ChildItem $Path -recurse)
{
(get-content $File.FullName) |
foreach-object {$_ -replace \"OLD\", \"NEW\"} |
set-content $File.FullName
}

Get-ChildItem $path -recurse|
type -path {$_.FullName}
[/code:1]
Uun code de test :
[code:1]
$Path=\"c:\temp\test\"
md $path -ea SilentlyContinue

$Template=@\"
chaine new
old chaine oldest
holding
old
\"@

1..5|% { Set-Content -Value $Template -Path \"$Path\File${_}.txt\"}

dir $path

Foreach ($File in Get-ChildItem $path -recurse)
{
(get-content $File.FullName) |
foreach-object {$_ -replace \"OLD\", \"NEW\"} |
set-content $File.FullName
}

Get-ChildItem $path -recurse|
type -path {Write-Warning $_;$_.FullName}
[/code:1]

Tutoriels PowerShell

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

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