none
Zeilenblock aus mehreren Dateien löschen RRS feed

  • Frage

  • Hallo, ich bin ziemlicher Anfänger in Powershell und hänge an folgendem Problem fest:

    Ich muss aus ~200 Dateien, die alle "PC-"und dann eine Zahlenfolge als Namen haben, die Zeilen 27-38 löschen.

    Mit meinem bisherigen Code schaffe ich es zwar, diese Löschung an einzelnen Dateien vorzunehmen, aber ich schaffe es nicht , den Input und Output als Variable zu erstellen.

    Hier der bisherige Code:

    $path =  "C:\Users\lea33631\Desktop\PC-kopie.cmd"
    $create = Out-File "C:\Users\lea33631\Desktop\PC-kopie3.cmd"
    Get-Content $path 
    
    
    $content[26] = 'delete'
    $content[27] = 'delete'
    $content[28] = 'delete'
    $content[29] = 'delete'
    $content[30] = 'delete'
    $content[31] = 'delete'
    $content[32] = 'delete'
    $content[33] = 'delete'
    $content[34] = 'delete'
    $content[35] = 'delete'
    $content[36] = 'delete'
    $content[37] = 'delete'
    
    Get-Content "C:\Users\lea33631\Desktop\PC-kopie3.cmd"
    
    foreach($line in $content){
        
        if($line -notlike 'delete'){
            echo $line >> "C:\Users\lea33631\Desktop\PC-kopie3.cmd"
        }
    }
    Remove-Item "C:\Users\lea33631\Desktop\PC-kopie.cmd"
    rename-item "C:\Users\lea33631\Desktop\PC-kopie3.cmd" "C:\Users\lea33631\Desktop\PC-kopie.cmd"

    Wahrscheinlich stelle ich mich hier nur doof an, aber vielleicht kann mir da ja jemand helfen?

    Vielen Dank schonmal im Voraus.

    Mittwoch, 10. Juli 2019 07:24

Antworten

  • Du machst Dir das Leben schon etwas schwerer als nötig. Wie Du Variablen füllst, Schleifen erzeugst und so weiter hast Du offenbar schon rausbekommen ... sehr gut.  Jetzt musst Du nur noch das Richtige in die Variablen packen und das dann in einer Schleife abarbeiten:
    $DateiListe = Get-ChildItem -Path 'Pfad zum Ordner mit Dateien' -Filter '*PC-*.cmd' 
    
    Foreach ($Datei in $DateiListe.FullName){
        $Content = Get-Content -Path $Datei
        $content[0..25] + $content[38..$Content.count] | Out-File -FilePath $Datei
    }
    ... 'ist natürlich ungetestet, aber so ähnlich sollte es klappen ... probier ma! ;-)

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 10. Juli 2019 08:38

Alle Antworten

  • Du machst Dir das Leben schon etwas schwerer als nötig. Wie Du Variablen füllst, Schleifen erzeugst und so weiter hast Du offenbar schon rausbekommen ... sehr gut.  Jetzt musst Du nur noch das Richtige in die Variablen packen und das dann in einer Schleife abarbeiten:
    $DateiListe = Get-ChildItem -Path 'Pfad zum Ordner mit Dateien' -Filter '*PC-*.cmd' 
    
    Foreach ($Datei in $DateiListe.FullName){
        $Content = Get-Content -Path $Datei
        $content[0..25] + $content[38..$Content.count] | Out-File -FilePath $Datei
    }
    ... 'ist natürlich ungetestet, aber so ähnlich sollte es klappen ... probier ma! ;-)

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 10. Juli 2019 08:38
  • Hat perfekt funktioniert, vielen Dank.
    Gerade der Teil hier:
      $content[0..25] + $content[38..$Content.count] | Out-File -FilePath $Datei
    hat mir das leben massiv vereinfacht.
    Mittwoch, 10. Juli 2019 09:50