Comment remplacer un texte dans un fichier en utilisant PowerShell
-
Utiliser
Get-Content
etSet-Content
pour remplacer chaque occurrence d’une chaîne dans un fichier avec PowerShell -
Utiliser la classe
File
pour remplacer chaque occurrence d’une chaîne dans un fichier avec PowerShell - Remplacer chaque occurrence d’une chaîne dans plusieurs fichiers avec PowerShell
- Conclusion

PowerShell est un outil puissant pour gérer les fichiers et les dossiers. Il vous permet de créer, copier, supprimer, déplacer, renommer et visualiser des fichiers et des dossiers sur le système.
Ce tutoriel introduira différentes méthodes pour remplacer chaque occurrence de chaîne dans un fichier avec PowerShell.
Utiliser Get-Content
et Set-Content
pour remplacer chaque occurrence d’une chaîne dans un fichier avec PowerShell
La commande 'Get-Content'
récupère le contenu d’un élément dans le chemin fourni, comme le texte dans un fichier. Le cmdlet 'Set-Content'
est un outil de traitement de chaîne qui vous permet d’ajouter un nouveau contenu à un fichier ou de remplacer un contenu existant.
Vous pouvez utiliser le cmdlet Get-Content
et Set-Content
pour remplacer chaque occurrence de chaîne dans un fichier.
Syntaxe :
(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'
Dans la syntaxe, nous remplaçons 'OldString'
par la chaîne que nous souhaitons remplacer et 'NewString'
par la chaîne que nous voulons mettre à sa place. Assurez-vous de remplacer 'Path\to\Your\File.txt'
par le chemin réel de votre fichier.
Prenons un exemple. Nous avons un fichier texte (test.txt
) dans le répertoire (C:\New
) avec le contenu suivant.
Get-Content C:\New\test.txt
Sortie :
Welcome to Linux tutorials.
Linux is free.
Linux is powerful.
Maintenant, remplaçons chaque occurrence de la chaîne 'Linux'
par 'PowerShell'
dans un fichier test.txt
avec l’aide du paramètre -Replace
. Les parenthèses ()
sont nécessaires autour de Get-Content
.
(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
Ensuite, visualisez le contenu d’un fichier test.txt
pour vérifier les modifications.
Get-Content C:\New\test.txt
Comme vous pouvez le voir, Linux
a été remplacé avec succès par PowerShell
.
Sortie :
Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.
Cette méthode utilise un tableau de chaînes pour trouver et remplacer des chaînes dans un fichier parce que le cmdlet Get-Content
retourne un tableau. Il est plus facile de remplacer des chaînes si le Get-Content
retourne une seule chaîne.
Nous pouvons utiliser le paramètre -Raw
comme montré ci-dessous. Le paramètre -Raw
est utilisé pour s’assurer que le contenu de 'C:\New\test.txt'
est lu comme une seule chaîne, permettant un remplacement efficace de 'Linux'
par 'PowerShell'
dans tout le fichier.
(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
Dans ce code, nous lisons le contenu d’un fichier situé à 'C:\New\test.txt'
comme une seule chaîne. Ensuite, nous utilisons l’opérateur -Replace
pour trouver et remplacer toutes les occurrences de 'Linux'
par 'PowerShell'
dans cette chaîne.
Enfin, nous sauvegardons le contenu modifié dans le même fichier, le mettant à jour avec le nouveau texte. Ce code est une manière simple d’effectuer des remplacements de texte dans un fichier en utilisant PowerShell.
Utiliser la classe File
pour remplacer chaque occurrence d’une chaîne dans un fichier avec PowerShell
La classe File
fournit des méthodes statiques pour des opérations courantes telles que créer, copier, déplacer, ouvrir, supprimer et ajouter à un seul fichier. Utilisez la méthode Replace()
de la classe File
pour remplacer le contenu d’un fichier spécifié.
Syntaxe :
$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)
Paramètres :
"FilePath"
: Cela doit être remplacé par le chemin réel du fichier."OldString"
: C’est la chaîne que vous voulez remplacer."NewString"
: C’est la chaîne par laquelle vous voulez le remplacer.
La méthode ReadAllText()
ouvre un fichier texte, lit tout le texte dans ce fichier, puis ferme le fichier.
La méthode WriteAllText()
crée un nouveau fichier, écrit la chaîne spécifique dans le fichier et ferme le fichier. Il est écrasé si le fichier cible existe déjà à l’emplacement.
Prenons un exemple. Nous avons un fichier texte (python.txt
) dans le répertoire (C:\New
) avec le contenu suivant.
Get-Content C:\New\python.txt
Sortie :
Find the best Python tutorials and learn Python easily from DelftStack.
Maintenant, remplaçons chaque occurrence d’une chaîne dans un fichier en utilisant la méthode de la classe File
.
$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)
Dans le code ci-dessus, nous commençons par créer une variable appelée $string
, qui stockera le contenu modifié du fichier 'C:\New\python.txt'
après avoir effectué le remplacement de texte. En utilisant [System.IO.File]::ReadAllText("C:\New\python.txt")
, nous lisons tout le contenu du fichier et le sauvegardons dans $string
.
Dans l’étape suivante, nous utilisons la méthode Replace()
pour localiser toutes les instances de "Python"
dans le contenu et les remplacer par "JavaScript"
, mettant ainsi à jour le texte. Enfin, nous utilisons [System.IO.File]::WriteAllText("C:\New\python.txt", $string)
pour écrire le contenu modifié dans le même fichier, écrasant le texte original et préservant nos changements.
Vérifiez les modifications apportées dans C:\New\python.txt
.
Get-Content C:\New\python.txt
Sortie :
Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.
Dans la sortie, nous pouvons voir que "Python"
a été remplacé par le mot "JavaScript"
.
Remplacer chaque occurrence d’une chaîne dans plusieurs fichiers avec PowerShell
Les méthodes ci-dessus remplacent une chaîne dans un seul fichier. Parfois, vous pourriez avoir besoin de remplacer la même chaîne dans plusieurs fichiers.
Dans ce cas, vous pouvez utiliser la commande ci-dessous pour remplacer chaque occurrence d’une chaîne spécifiée dans plusieurs fichiers.
Get-ChildItem 'C:\New\*.txt' | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
Dans le code ci-dessus, nous commençons par utiliser Get-ChildItem
pour collecter une liste de fichiers '.txt'
dans le répertoire 'C:\New'
. Le caractère générique *
spécifie tous les fichiers avec l’extension de nom de fichier .txt
.
Nous parcourons ensuite chaque fichier, lisons son contenu avec Get-Content
et appliquons une opération de remplacement, changeant 'weekly'
en 'monthly'
, à l’aide de l’opérateur -Replace
. Le contenu modifié est ensuite écrit dans le même fichier avec Set-Content
.
Ce processus se répète pour chaque fichier du répertoire, remplaçant efficacement 'weekly'
par 'monthly'
dans plusieurs fichiers.
Nous pouvons également utiliser le paramètre -Recurse
pour remplacer une chaîne dans les fichiers du répertoire spécifié et de ses sous-répertoires.
Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
Dans ce code, nous commençons par utiliser Get-ChildItem
pour assembler une liste de fichiers '.txt'
dans 'C:\New'
et ses sous-répertoires. L’option -Recurse
garantit que nous recherchons ces fichiers non seulement dans le répertoire spécifié mais aussi dans ses sous-répertoires.
Nous utilisons ensuite une paire de boucles ForEach
pour accéder au contenu de chaque fichier. Dans la boucle intérieure, nous utilisons l’opérateur -Replace
pour substituer 'weekly'
par 'monthly'
dans le texte.
Enfin, nous sauvegardons le contenu ajusté dans le même fichier. Ce processus s’exécute à travers tous les fichiers dans 'C:\New'
et ses sous-dossiers, nous permettant de remplacer efficacement 'weekly'
par 'monthly'
à travers de nombreux fichiers et répertoires imbriqués.
Conclusion
Dans cet article, nous avons examiné différentes manières de remplacer des chaînes dans un seul fichier en utilisant les cmdlets Get-Content
et Set-Content
, offrant à la fois une méthode basique et une méthode plus efficace avec le paramètre -Raw
. Ensuite, nous avons exploité la puissance de la classe File
pour remplacer du texte dans des fichiers, démontrant une technique plus avancée.
En outre, nous avons élargi nos connaissances en remplaçant du texte dans plusieurs fichiers dans un répertoire et ses sous-répertoires. Ces méthodes facilitent l’édition de texte dans vos fichiers et montrent à quel point PowerShell peut être utile pour des tâches comme celle-ci.
Article connexe - PowerShell String
- Comment convertir une chaîne sécurisée en texte brut dans PowerShell
- Comment extraire une sous-chaîne PowerShell d'une chaîne
- Comment générer des chaînes aléatoires en utilisant PowerShell
- Comment supprimer les espaces d'une variable en utilisant PowerShell
- Comment trouver la position d'une sous-chaîne dans PowerShell