[RESOLU] [POWERSHELL] Modifier des lignes précises sur un fichier

Modifier des lignes précises sur un fichier [RESOLU] [POWERSHELL] - Shell/Batch - Programmation

Marsh Posté le 06-01-2015 à 20:40:48    

Bonjour,
 
Je viens vers vous car je rencontre un problème.
Je voudrais supprimer des lignes précises dans un fichier.
Mon fichier ce compose ainsi :
Sauvegarde1: réussie.
Sauvegarde2: échouée.
Sauvegarde2: réussie.
Sauvegarde3: réussie.
Sauvegarde4: réussie.
Sauvegarde5: réussie.
Sauvegarde6: réussie.
 
Je voudrai que si on retrouve 2 fois le même nom de sauvegarde, on supprime la sauvegarde contenant "réussie" pour ne laisser que la sauvegarde "échouée"
C'est la où je bloque, j'arrive à faire un comparatif entre une ligne et la ligne suivante mais je n'arrive pas à supprimer la ligne du fichier.
Merci de votre aide.
 
Voici mon code

Code :
  1. #Montage du lecteur CHEMREP
  2. New-PSDrive -name CHEMREP -Root D:\TEST -PSProvider FileSystem
  3. #Montage du lecteur CHEMSCRIPT
  4. #New-PSDrive -name CHEMSCRIPT -Root C:\ISI\Scripts\Log_Powershell -PSProvider FileSystem
  5. #Ficfinal est le nom du fichier final
  6. $Ficfinal = "CHEMREP:\FicFinal.txt"
  7. #NbligneFic récupère le nombre de ligne trouvé dans le fichier.
  8. $NbligneFic = (get-content $Ficfinal | Measure-Object -Line).lines
  9. #LectFicLog reçoit le contenu du fichier $MonFichier2
  10. $LectFicLog = get-content $Ficfinal
  11. $i = 1
  12. Function Get-TestLig {
  13.     param ([string]$ResSauv)
  14.     For ($i ; $i -lt $NbligneFic; $i++){
  15.         [string]$NomSauvLgSuiv = [String](Get-Content $Ficfinal | where {
  16.             $_ -ne "$null" } | Select-Object -Index $i).Split(":" )[0]
  17.         [string]$ResSauvLgSuiv = [String](Get-Content $Ficfinal | where {
  18.         $_ -ne "$null" } | Select-Object -Index $i).Split(":" )[1]
  19.         #Write-Host "Nom sauvegarde : $NomSauv et Nom sauvegarde Ligne suiv : $NomSauvLgSuiv"
  20.         If ($NomSauv -like $NomSauvLgSuiv){
  21.             If ($ResSauv -like "réussie" ) {
  22.                     ====> Code pour supprimer la ligne  <====
  23.             }
  24.                
  25.             Else {
  26.                   ====> Code pour supprimer la ligne  <====
  27.             }
  28.         }
  29.     }
  30. }
  31. $LectFicLog | Foreach {
  32.                 Foreach ($LigneFicLog in $_) {
  33.                     #Découpage des valeurs de chaque ligne
  34.                     [string]$NomSauv = ($_).Split(":" )[0]
  35.                     #Découpage des valeurs de chaque ligne
  36.                     [string]$ResSauv = ($_).Split(":" )[1]
  37.                     get-Testlig $ResSauv
  38.                     $i = $i + 1
  39.                    
  40.                 }
  41.                }
  42.                  
  43. #Déconnexion du lecteur réseau.
  44. Remove-Psdrive -name CHEMREP
  45. #Déconnexion du lecteur réseau.
  46. #Remove-Psdrive -name CHEMSCRIPT


Message édité par vb_user le 08-01-2015 à 20:34:20
Reply

Marsh Posté le 06-01-2015 à 20:40:48   

Reply

Marsh Posté le 08-01-2015 à 20:33:50    

Bonsoir à tous,
 
J'ai trouvé ma réponse

Code :
  1. $fichier  = get-content $Ficfinal
  2. $fichier[0..($i-2)] > $Ficfinal
  3. $fichier[($i)..($fichier.length-1)] >> $Ficfinal


 
Cela me permet de supprimer la ligne en double.
 
Je pense que mon code pourra servir à d'autres.

Reply

Sujets relatifs:

Leave a Replay

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