Powershell - PDF mit einer .csv umbenennen
Hallo zusammen,
mir wurde vor einigen Tagen hier im Forum sehr gut geholfen und ich hoffe, dass ich bei einem weiteren Problem nun auch Hilfe bekommen könnte. Tut mir leid, dass es eine Art Auftragsarbeit ist, ich weiß auf die Schnelle jedoch keine andere Möglichkeit bei dem Thema weiterzukommen. Also vielen herzlichen Dank für jeden der sich der Sache annimmt:
Ich habe in einem Ordner mehrere PDF Dateien die ich umbenennen möchte. Die dazu nötigen Informationen kommen immer per .csv
PDF Name: 64_4_626_378859_61012428_41219099.pdf
.CSV ist folgendermaßen aufgebaut:
Ich möchte nun mit Powershell, dass mir die PDF anhand der .csv mit folgender Syntax umbenannt wird:
Inhaber 1_Unterbelegart_Gattungsbezeichnung_Datum.pdf
Wäre super wenn sich jemand erbarmen könnte. Vielen Dank im Voraus und beste Grüße
Baraban
mir wurde vor einigen Tagen hier im Forum sehr gut geholfen und ich hoffe, dass ich bei einem weiteren Problem nun auch Hilfe bekommen könnte. Tut mir leid, dass es eine Art Auftragsarbeit ist, ich weiß auf die Schnelle jedoch keine andere Möglichkeit bei dem Thema weiterzukommen. Also vielen herzlichen Dank für jeden der sich der Sache annimmt:
Ich habe in einem Ordner mehrere PDF Dateien die ich umbenennen möchte. Die dazu nötigen Informationen kommen immer per .csv
PDF Name: 64_4_626_378859_61012428_41219099.pdf
.CSV ist folgendermaßen aufgebaut:
Ich möchte nun mit Powershell, dass mir die PDF anhand der .csv mit folgender Syntax umbenannt wird:
Inhaber 1_Unterbelegart_Gattungsbezeichnung_Datum.pdf
Wäre super wenn sich jemand erbarmen könnte. Vielen Dank im Voraus und beste Grüße
Baraban
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1508498852
Url: https://administrator.de/contentid/1508498852
Ausgedruckt am: 19.11.2024 um 22:11 Uhr
6 Kommentare
Neuester Kommentar
$csvfile = 'D:\test.csv'
$folder = 'D:\quelle'
$csv = Import-CSV $csvfile -Delimiter ";"
foreach($pdf in (Get-ChildItem $folder -File -Filter *.pdf)){
$item = $csv | ?{$_.Versandkey -eq $pdf.Name}
if ($item){
$newname = "$($item.'Inhaber 1')_$($item.Unterbelegart)_$($item.Gattungsbezeichnung)_$($item.Datum).pdf" -replace '["<>\|:\*\?\\/]',"_"
Rename-Item $pdf.Fullname -NewName $newname -verbose
}
}
Zitat von @Baraban:
Kann man auch alle .csv Dateien unabhängig vom Namen in einem Order abarbeiten lassen, damit diese nicht manuell eingegeben werden müssen? (Es kommt täglich eine .csv samt den PDFs)
Die .csv ist nicht im UTF8, somit werden die Umlaute kryptisch dargestellt. Kann man hier mit einem entsprechenden Befehl die .csv entweder direkt in UTF8 konvertieren oder einlesen, ohne dass ich diese manuell anfassen muss?
Kann man auch alle .csv Dateien unabhängig vom Namen in einem Order abarbeiten lassen, damit diese nicht manuell eingegeben werden müssen? (Es kommt täglich eine .csv samt den PDFs)
Die .csv ist nicht im UTF8, somit werden die Umlaute kryptisch dargestellt. Kann man hier mit einem entsprechenden Befehl die .csv entweder direkt in UTF8 konvertieren oder einlesen, ohne dass ich diese manuell anfassen muss?
$folder = 'D:\quelle'
$csv = @()
Get-ChildItem $folder -File -Filter *.csv | %{
$csv += Import-CSV $_.FullName -Delimiter ";" -Encoding Default
}
foreach($pdf in (Get-ChildItem $folder -File -Filter *.pdf)){
$item = $csv | ?{$_.Versandkey -eq $pdf.Name} | select -First 1
if ($item){
$newname = "$($item.'Inhaber 1')_$($item.Unterbelegart)_$($item.Gattungsbezeichnung)_$($item.Datum).pdf" -replace '["<>\|:\*\?\\/]',"_"
Rename-Item $pdf.Fullname -NewName $newname -verbose
}
}
Jetzt kommt 30.09.21 00_00_00_ raus
Das habe ich gemacht da Doppelpunkte in Dateinamen ungültig sind...Klar, wenn du die Zeit weglassen willst bspw. einfach mit Split die Variable trennen ...
$item.Datum.split(" ")
$folder = 'D:\quelle'
$csv = @()
Get-ChildItem $folder -File -Filter *.csv | %{
$csv += Import-CSV $_.FullName -Delimiter ";" -Encoding Default
}
foreach($pdf in (Get-ChildItem $folder -File -Filter *.pdf)){
$item = $csv | ?{$_.Versandkey -eq $pdf.Name} | select -First 1
if ($item){
$newname = "$($item.'Inhaber 1')_$($item.Unterbelegart)_$($item.Gattungsbezeichnung)_$($item.Datum.split(" ")).pdf" -replace '["<>\|:\*\?\\/]',"_"
Rename-Item $pdf.Fullname -NewName $newname -verbose
}
}