Powershell-Script zur Umstellung Datei-Namen gesucht
Hallo,
ich würde mich über eine Hilfestellung bei der Erstellung eines Powershell-Scriptes freuen.
Das Script soll alle .pdf-Dateien in einem Verzeichnis nach einer speziellen Bildungsvorschrift umbenennen.
bisheriges Format: Datum_Zahl_Text_Rest.pdf
in das Neue Format: Zahl-Datum-Text.pdf
mein bislang gebasteltes Script:
liefert mir schon den korrekten Dateinamen (umgewandelte Position, umgewandelte Striche, Verkürzung, Dateiendung), aber wie benenne ich nun die alte Datei in die neue um?
ich habe viele Versuche mit Rename unternommen, aber PowerShell bringt immer Fehlermeldungen.
Danke für Hinweise!
Alexander
ich würde mich über eine Hilfestellung bei der Erstellung eines Powershell-Scriptes freuen.
Das Script soll alle .pdf-Dateien in einem Verzeichnis nach einer speziellen Bildungsvorschrift umbenennen.
bisheriges Format: Datum_Zahl_Text_Rest.pdf
in das Neue Format: Zahl-Datum-Text.pdf
mein bislang gebasteltes Script:
Get-ChildItem L:\Dateien\ -File | ForEach-Object {
$Datum,$Zahl,$Test,$Rest = $_.Name -split '_',4
$Neu = $Zahl + "-" + $Datum + "-" + $Text + ".pdf"
$Neu
}
Pause
liefert mir schon den korrekten Dateinamen (umgewandelte Position, umgewandelte Striche, Verkürzung, Dateiendung), aber wie benenne ich nun die alte Datei in die neue um?
ich habe viele Versuche mit Rename unternommen, aber PowerShell bringt immer Fehlermeldungen.
Danke für Hinweise!
Alexander
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1961880170
Url: https://administrator.de/contentid/1961880170
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
26 Kommentare
Neuester Kommentar
Get-ChildItem L:\Dateien -File -Filter *.pdf | rename-item -NewName {$_.Basename -replace '^(.*?)_(.*?)_(.*?)_.*','$2-$1-$3.pdf'}
Hab's doch oben schon an deinen Fall angepasst, läuft hier wie gewünscht ...
Guckst du, Online-Demo
https://tio.run/##bY6xCsIwFEX3fsUbAtFiAq0fIKgoLh3EycEQ2ycppLYkr1ZQvz22mR ...
Guckst du, Online-Demo
https://tio.run/##bY6xCsIwFEX3fsUbAtFiAq0fIKgoLh3EycEQ2ycppLYkr1ZQvz22mR ...
Zitat von @alexander01:
Sorry, Pretty,
klappt bei mir bei diesem Fall nicht:
2019-08-17_13256_Text_Rest1_Re. st2.pdf
könnte der / ein Punkt im Text Rest2 stören? oder das / ein Leerzeichen?
Grüße
Alexander
Sorry, Pretty,
klappt bei mir bei diesem Fall nicht:
2019-08-17_13256_Text_Rest1_Re. st2.pdf
könnte der / ein Punkt im Text Rest2 stören? oder das / ein Leerzeichen?
Grüße
Alexander
Sicher geht das, guckst du hier das es geht ...
https://tio.run/##TYzNCoJAFEb3PsVFBizpDs5If6ugoGjjIlo3mN5QGFNmpgyqZzd11e ...
Blödsinn S.o. Online-Demo im letzten Comment läuft einwandfrei, das Leerzeichen ist wurscht und hat hier nichts zu sagen!
Du kannst den Regex alternativ auch so schreiben, kommt auf das selbe drauf raus und funktioniert ebenfalls einwandfrei.
Beweis dass dies ebenfalls läuft hier
https://tio.run/##XYxNC4JAFEX3/opHCFPWGxylr21B0cZFtIscTF8ojCkzUwbVbzd12e ...
Das hier als weitere Alternative geht ebenfalls problemlos
https://tio.run/##HYzLCsIwEEX3/YpBhLTaCU3F11ZBcdOFuBMJ1Y40kj5oohXUb49tNw ...
Ansonsten machst du einen Fehler beim übernehmen.
I'm out.
Du kannst den Regex alternativ auch so schreiben, kommt auf das selbe drauf raus und funktioniert ebenfalls einwandfrei.
Get-ChildItem L:\Dateien -File -Filter *.pdf | rename-item -NewName {$_.Basename -replace '^([^_]+)_([^_]+)_([^_]+).*','$2-$1-$3.pdf'}
https://tio.run/##XYxNC4JAFEX3/opHCFPWGxylr21B0cZFtIscTF8ojCkzUwbVbzd12e ...
Das hier als weitere Alternative geht ebenfalls problemlos
Get-ChildItem L:\Dateien -File -Filter *.pdf | rename-item -NewName {($_.Basename.split('_')[1,0,2] -join '-') + '.pdf'} -verbose
Ansonsten machst du einen Fehler beim übernehmen.
funktioniert das Script nicht mehr
"Funktioniert nicht" ist keine Fehlermeldung in einem Admin Forum!I'm out.
Hier funktionieren alle Varianten im Test einwandfrei, mit deinen uns zur Verfügung gestellten Varianten. Sieht man ja schon an den Online-Demos, das ist eindeutig, ansonsten hast du uns etwas verschwiegen .
Danke für Deine Hilfe!
Bitte.
Hatte man sich ja auch mal vorher überlegen können ....
Get-ChildItem L:\Dateien -File -Filter *.pdf | %{
if ($_.Basename -match '^([^_]+)_([^_]+)_([^_]+)'){
$part1 = $matches[1]
$part2 = $matches[2]
$part3 = $matches[3]
switch -regex ($part3){
'^xy$' {$part3 = 'z'}
'^Haus.*' {$part3 = 'v'}
}
$newname = "$part2-$part1-$part3.pdf"
$cnt = 1
while(Test-Path "$($_.DirectoryName)\$newname"){
$newname = "$part2-$part1-$part3-$cnt.pdf"
$cnt++
}
rename-item $_.Fullname -NewName $newname -verbose
}
}
Was vergessen, angepasst.
Oder muß ich jedesmal den Switch-Befehl (also den Syntax-Block von oben) neu schreiben?
Blödsinn...Einfach mal selber in die Doku schauen das beantwortet dir die Frage von selbst wie man der Switch-Anweisung mehrere Bedingungen hinzufügt, genau dafür wurde die ja erfunden ...Alles, was Sie schon immer über die switch-Anweisung wissen wollten
Dafür hat Switch den -regex Parameter 😉
switch -regex ($part3){
'^xy$' {$part3 = 'z'}
'^Haus.*' {$part3 = 'v'}
}
Weise ihnen vorher Variablen zu ...