none
Zeichen am Anfang von Zeile in Textdatei setzen RRS feed

  • Frage

  • Hallo,

    ich habe ein einfaches Script geschrieben, dass eine Textdatei mit E-Mail-Adressen zeilenweise ausliest. Außerdem habe ich ein "Auskommentierungszeichen" realisiert, d.h. E-Mail-Adressen, die mit einer "#" beginnen, werden vom Script ignoriert.

    Nun möchte ich eine weitere Funktionalität, und zwar, dass eine "abgearbeitete" E-Mail-Adresse in der Textdatei auskommentiert wird, also dass nach auslesen der Adresse eine "#" davor gesetzt wird.

    Irgendwelche Anregungen? Vielen Dank schonmal

    Dienstag, 26. Februar 2013 09:36

Antworten

  • Dies macht man am besten, indem man währen der Abarbeitung eine zweite Datei erzeugt, in der die Abarbeitung Protokolliert wird.
    Zum Schluss ersetzt diese Datei das Original!

    Beispielcode:

    # Pfad zur Datei mit den Computernamen
    $DateiPfad = "C:\temp\computer.txt"
    
    
    
    
    # Temporäre Datei die während der Abarbeitung die neuen Zeilen enthält
    $TempPfad = "$env:temp\TempComputer.txt"
    
    #Leere Temporäre Datei anlegen
    New-Item -Path $TempPfad -ItemType 'File' -Force
    
    # Jede Zeile in der Computer Datei abarbeiten
    ForEach($Computer in Get-Content $DateiPfad) {
        
        # Wenn die Zeile schon mit dem '#' Zeichen beginnt, nicht Verarbeiten
        IF(([String]$Computer).Trim().StartsWith("#")) {
            # Zeile an die temporäre Datei anhängen
            $Computer | Out-File -FilePath $TempPfad -Append
        }
        Else {
            If("Rechner erreicht!" -eq "Rechner erreicht!") {
                #Zeile beginnt nicht mit dem '#' Zeichen
                # Arbeit mit dem Rechner erledigen
                # Das Kommentarzeichen vor die Zeile Schreiben
                ('# ' + $Computer) | Out-File -FilePath $TempPfad -Append 
                 Write-Host "$Computer erreicht, und wird auskommentiert!"
            }
            Else {
                # Rechner wurde nicht erreicht!
                # kein Kommentarzeichen vor die Zeile Schreiben
                $Computer | Out-File -FilePath $TempPfad -Append
                Write-Host "$Computer NICHT erreicht!"
            }
        }
    }
    
    # Ganze Arbeit ist erledigt
    # nun ersetzt die Temporäre Datei die echte!
    Copy-Item -Path $TempPfad -Destination $DateiPfad -Force
    
    # Temporäre Datei löschen (aufräumen)
    Remove-Item -Path $TempPfad -Force


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Orothred Dienstag, 26. Februar 2013 12:11
    Dienstag, 26. Februar 2013 11:40

Alle Antworten

  • Dies macht man am besten, indem man währen der Abarbeitung eine zweite Datei erzeugt, in der die Abarbeitung Protokolliert wird.
    Zum Schluss ersetzt diese Datei das Original!

    Beispielcode:

    # Pfad zur Datei mit den Computernamen
    $DateiPfad = "C:\temp\computer.txt"
    
    
    
    
    # Temporäre Datei die während der Abarbeitung die neuen Zeilen enthält
    $TempPfad = "$env:temp\TempComputer.txt"
    
    #Leere Temporäre Datei anlegen
    New-Item -Path $TempPfad -ItemType 'File' -Force
    
    # Jede Zeile in der Computer Datei abarbeiten
    ForEach($Computer in Get-Content $DateiPfad) {
        
        # Wenn die Zeile schon mit dem '#' Zeichen beginnt, nicht Verarbeiten
        IF(([String]$Computer).Trim().StartsWith("#")) {
            # Zeile an die temporäre Datei anhängen
            $Computer | Out-File -FilePath $TempPfad -Append
        }
        Else {
            If("Rechner erreicht!" -eq "Rechner erreicht!") {
                #Zeile beginnt nicht mit dem '#' Zeichen
                # Arbeit mit dem Rechner erledigen
                # Das Kommentarzeichen vor die Zeile Schreiben
                ('# ' + $Computer) | Out-File -FilePath $TempPfad -Append 
                 Write-Host "$Computer erreicht, und wird auskommentiert!"
            }
            Else {
                # Rechner wurde nicht erreicht!
                # kein Kommentarzeichen vor die Zeile Schreiben
                $Computer | Out-File -FilePath $TempPfad -Append
                Write-Host "$Computer NICHT erreicht!"
            }
        }
    }
    
    # Ganze Arbeit ist erledigt
    # nun ersetzt die Temporäre Datei die echte!
    Copy-Item -Path $TempPfad -Destination $DateiPfad -Force
    
    # Temporäre Datei löschen (aufräumen)
    Remove-Item -Path $TempPfad -Force


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Als Antwort markiert Orothred Dienstag, 26. Februar 2013 12:11
    Dienstag, 26. Februar 2013 11:40
  • Super, vielen Dank :-)
    Dienstag, 26. Februar 2013 13:37