Powershell - Ajouter une ligne dans un fichier à partir d'une ligne précise

Pour me soutenir, vous pouvez vous abonner à la chaîne, partager et liker les vidéos, désactiver votre bloqueur de pub ou encore faire un don. Merci!

Bonjour,

Etant passé d’un site basé sur un CMS avec base de données à un site basé sur des fichiers Markdown, j’ai eu besoin de modifier ce qu’on appelle le frontmatter.

Une section au début du fichier Markdown contenant des informations sur l’article (date, titre…).

Le plus simple, pour cette action, est d’utilisé une collection (collection, arraylist, genericlist) qui contient une méthode .insert().

Voici quelques exemples pour ajouter une ligne à un emplacement spécifique dans fichier (vous connaissez le numéro de la ligne ou vous voulez placer votre contenu texte)

## A partir d'un arraylist
# Chemin des fichiers
$Path = 'c:\Path_File'
# Contenu à ajouter
$TextToAdd = "lang: fr"
# Liste lister les fichiers
$Files = Get-ChildItem -path $Path -File
# Boucle pour chaque fichiers
foreach ( $File in $Files ) {
# Charger le contenu du fichier
[System.Collections.ArrayList]$FileContent1 = get-content $File.FullName
# Ajout du contenu
# 7 correspond à un ajout à la 8e ligne
$FileContent1.Insert(7,$TextToAdd)
# Modification du fichier
Set-Content -Path $File.FullName -Value $FileContent1
}
## A partir d'une Generic List
# Chemin des fichiers
$Path = 'c:\Path_File'
# Contenu à ajouter
$TextToAdd = "lang: en"
# Liste lister les fichiers
$Files = Get-ChildItem -path $Path -File
# Boucle pour chaque fichiers
foreach ( $File in $Files ) {
# Charger le contenu du fichier
[System.Collections.Generic.List[String]]$FileContent2 = get-content $File.FullName
# Ajout du contenu
# 7 correspond à un ajout à la 8e ligne
$FileContent2.Insert(7,$TextToAdd)
# Modification du fichier
Set-Content -Path $File.FullName -Value $FileContent2
}
## En transformant le array en collection
# Chemin des fichiers
$Path = 'c:\Path_File'
# Contenu à ajouter
$TextToAdd = "lang: es"
# Liste lister les fichiers
$Files = Get-ChildItem -path $Path -File
# Boucle pour chaque fichiers
foreach ( $File in $Files ) {
# Charger le contenu du fichier
$FileContent3 = get-content $File.FullName
# Transformation en collection pour obtenir la méthode .Insert()
$FileContent3 = {$FileContent3}.invoke()
# Ajout du contenu
# 7 correspond à un ajout à la 8e ligne
$FileContent3.Insert(7,$TextToAdd)
# Modification du fichier
Set-Content -Path $File.FullName -Value $FileContent3
}

Liens en relation