none
Powershell-Script zur Umbennung von Dateien RRS feed

  • Frage

  • Hallo Zusammen,

    wir benötigen hier ein simples Powershell-Script, mit dem man PDF-Dateien anhand des Inhalts einer gleichnamigen TXT-Datei umbenennen kann.

    Die TXT-Datei sieht immer ähnlich wie folgt aus:

    "Rechnungen","Rechnung","Bankleitzahl","","Bestellnummer","DE123456","Endbetrag","927,75","Kontonummer","","Kreditinstitut","","Kundennummer","123456","LieferantenName","Grundig Business Systems GmbH","Rechnungsart","Rechnung","Rechnungsdatum","17.08.2012","Rechnungsnummer","3920232035","Steuerbetrag","176,27","Steuersatz","19,00","W?hrung","EUR","Warenwert","927,75","Rabatt","0,00","Versandkosten","0,00","\\192.xxx.xxx.xxx\Scans\Rechnungen\22.08.2012\Grundig Business Systems GmbH_22.08.2012.pdf"

    Wir haben immer 2 Dateien:

    Grundig Business Systems GmbH_22.08.2012.pdf

    Grundig Business Systems GmbH_22.08.2012.txt

    PDF- und Textdatei heißen immer gleich, mit der entsprechenden Endung.

    Die PDF-Datei soll nun in den Dateinamen, welcher hinter "Rechnungsnummer" erscheint (die eigentliche Rechnungsnummer) umbenannt werden, Beispiel hier:

    3920232035.PDF

    Es handelt sich hier um den Versuch, bestehende, gescannte PDFs in eine Archivierung (Docuware) zu importieren. Bitte davon ausgehen, dass wir absolute Anfänger im Bereich Powerscript sind, also bitte möglichst einfache Schritte.

    Vielen Dank im vorraus!


    • Bearbeitet SchneiderF Dienstag, 4. September 2012 13:06
    Dienstag, 4. September 2012 13:03

Antworten

  • Ich betracht es mal als kleine Übung für mich :-)
    Geht sicherlich auch schöner, aber funktioniert zumindest.

    $txt = "C:\Grundig Business Systems GmbH_22.08.2012.txt"
    $pdf = "C:\Grundig Business Systems GmbH_22.08.2012.pdf"
    $content = GC $txt #TXT-Einlesen
    
    $txtb = $txt.split("\") | Select-Object -Last 1 | foreach{$_.split(".")} | Select-Object -First 1 #Nur Dateiname ohne extension, für den Vergleich
    $pdfb = $pdf.split("\") | Select-Object -Last 1 | foreach{$_.split(".")} | Select-Object -First 1 
    
    if($txtb -eq $pdfb){ #Vergleich ob Namen von pdf und txt identisch sind    
        $objects = $content.split(",") | ForEach-Object{ $_.trimstart("`"").trimend("`"")} #In Objekte verschachteln und die Anführungszeichen entfernen   
        For($i = 0; $i -lt $objects.count; $i++){ #Objekte durchlaufen
            if($objects[$i] -match "Rechnungsnummer"){ #Nachguckn wo Rechnungsnummer steht
                $filename = $objects[$i + 1] #denn im nächsten Objekt steht der Wert, dieser wird dann in $filename geschrieben
            }        
        } 
        Rename-Item -path $pdf -NewName "$filename.pdf" #Rename-Item ist der Schlüssel zur Umbenennung von Files
    }
    
    else{
        Write-Host "Keine Gleichnamigen Files gefunden" #Falls die Dateinamen nicht ident sind, machen wir zur Sicherheit nichts.
    }

    Ich check das mit der Formatierung im Codeblock noch nicht ganz. Da ist nämlich zuviel grün markiertes








    • Bearbeitet speedcar343 Mittwoch, 5. September 2012 13:02
    • Als Antwort markiert Alex Pitulice Montag, 10. September 2012 07:22
    Mittwoch, 5. September 2012 12:27

Alle Antworten

  • > wir benötigen hier ein simples Powershell-Script
     

    Sorry, aber das hier ist nicht die Scriptabteilung bei der man Arbeitsaufträge eintüten kann.

     

    Bitte geh folgerndermassen vor:

    - überlege welche Arbeitschritte genau nötig sind und welche wiederholt werden müssen

    - ergoogle die einzelnen Arbeitsschritte, z.b. "einlesen einer Text- oder CSV-datei mit Powershell"

    - versuche ein Script daraus zu schreiben

     

    Wenn du dann damit Probleme hast, kannst du hier gerne fragen.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Dienstag, 4. September 2012 13:17
    Moderator
  • Ich betracht es mal als kleine Übung für mich :-)
    Geht sicherlich auch schöner, aber funktioniert zumindest.

    $txt = "C:\Grundig Business Systems GmbH_22.08.2012.txt"
    $pdf = "C:\Grundig Business Systems GmbH_22.08.2012.pdf"
    $content = GC $txt #TXT-Einlesen
    
    $txtb = $txt.split("\") | Select-Object -Last 1 | foreach{$_.split(".")} | Select-Object -First 1 #Nur Dateiname ohne extension, für den Vergleich
    $pdfb = $pdf.split("\") | Select-Object -Last 1 | foreach{$_.split(".")} | Select-Object -First 1 
    
    if($txtb -eq $pdfb){ #Vergleich ob Namen von pdf und txt identisch sind    
        $objects = $content.split(",") | ForEach-Object{ $_.trimstart("`"").trimend("`"")} #In Objekte verschachteln und die Anführungszeichen entfernen   
        For($i = 0; $i -lt $objects.count; $i++){ #Objekte durchlaufen
            if($objects[$i] -match "Rechnungsnummer"){ #Nachguckn wo Rechnungsnummer steht
                $filename = $objects[$i + 1] #denn im nächsten Objekt steht der Wert, dieser wird dann in $filename geschrieben
            }        
        } 
        Rename-Item -path $pdf -NewName "$filename.pdf" #Rename-Item ist der Schlüssel zur Umbenennung von Files
    }
    
    else{
        Write-Host "Keine Gleichnamigen Files gefunden" #Falls die Dateinamen nicht ident sind, machen wir zur Sicherheit nichts.
    }

    Ich check das mit der Formatierung im Codeblock noch nicht ganz. Da ist nämlich zuviel grün markiertes








    • Bearbeitet speedcar343 Mittwoch, 5. September 2012 13:02
    • Als Antwort markiert Alex Pitulice Montag, 10. September 2012 07:22
    Mittwoch, 5. September 2012 12:27
  • Du kümmerst dich dann auch zukünftig um solche Anfragen? Das nehm ich dann gerne so auf... :)

    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Mittwoch, 5. September 2012 18:39
    Moderator
  • Nö ;-)

    Gruß Speedy

    Donnerstag, 6. September 2012 05:58
  • Die meisten Administratoren leiden halt mit Ihrem Helfersyndrom ;-))

    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    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' '

    Donnerstag, 6. September 2012 07:36