rockett
Goto Top

Dateien Filtern und umbenannt kopieren

Hallo Zusammen,

ich habe ein Script, welches aktuell in einem Ordner Dateien mit einem bestimmten Prefix filtert und kopiert. Dies würde ich gerne erweitern. Hier zunächst der ist Stand:

Get-ChildItem -Recurse -LiteralPath $InvoicePath -Filter *auk* -File | Copy-Item -Destination $InvoiceCopy

Die Dateien um die es geht sind bestehen aus dem Prefix und einer Rechnungsnummer, also z.B. "auk_2025451". Ich würde diese aber nun gerne beim kopieren umbenennen, es dürfen aber nicht die Originaldateien umbenannt werden, da diese noch in anderen Scripten verarbeitet werden.

aus dem "auk_2025451" soll z.B. "2025451_Rechnung" werden.

Das bedeutet es müsste also der Dateiname ermittelt, die ersten 4 stellen "auk_" ignoriert und dann nach dem "2025451" das Suffix "_Rechnung" angehängt werden.

Die Idee steht, aber bei der Umsetzung bin ich leider nicht firm genüg, könnt ihr helfen?

Content-Key: 61083428810

Url: https://administrator.de/contentid/61083428810

Printed on: July 16, 2024 at 19:07 o'clock

Member: WolleRoseKaufe
Solution WolleRoseKaufe Jul 08, 2024 updated at 11:11:03 (UTC)
Goto Top
Hi.
$InvoicePath = "F:\Rechnungen"  
$InvoiceCopy = "Z:\Ablage"  
Get-ChildItem -Recurse -LiteralPath $InvoicePath -Filter "*auk*" -File | Copy-Item -Destination {"$InvoiceCopy\$($_.Basename -replace '.*auk_([a-z\d]+).*','$1_Rechnung')$($_.Extension)"} -verbose  
Gruß wrk
Member: Rockett
Rockett Jul 08, 2024 updated at 10:27:32 (UTC)
Goto Top
Danke wrk, aber leider hat das nicht funktioniert. Der Dateiname bleibt unverändert.

Habe ein Detail vergessen, die Dateien sind in unterordnern. Aber gefunden hat er sie ja, nur den Namen nicht geändert. Trotzdem der Vollständigkeit halber
Member: erikro
erikro Jul 08, 2024 at 10:34:37 (UTC)
Goto Top
Moin,

da hast Du:

PARAM (

    $InvoiceSPath = "u:\test",  
    $InvoiceDPath = "u:\test_dest"  
)

$invoices = Get-ChildItem -Recurse -Path $InvoiceSPath -Filter "auk_*" -File  


foreach($file in $invoices) {

    $newname = $file.basename.replace("auk_","")  
    $newname = $newname + "_rechnung" + $file.extension  
    copy-item $file.FullName -Destination "$InvoiceDPath\$newname"  
}

hth

Erik
Member: WolleRoseKaufe
WolleRoseKaufe Jul 08, 2024 updated at 10:56:31 (UTC)
Goto Top
Zitat von @Rockett:

Danke wrk, aber leider hat das nicht funktioniert. Der Dateiname bleibt unverändert.

Habe ein Detail vergessen, die Dateien sind in unterordnern. Aber gefunden hat er sie ja, nur den Namen nicht geändert. Trotzdem der Vollständigkeit halber

Klappt doch, guckst du die Demo ...

https://tio.run/##bY/LboMwEEX3/ooRQiLQGgp9L7pp@lCkLKquIyEHprEVYyM/0ve3U0 ...

Du verwendest vermutlich wohl noch ne veraltete PowerShell.
Member: Rockett
Rockett Jul 08, 2024 at 11:00:43 (UTC)
Goto Top
Du verwendest wohl noch ne veraltete PowerShell.

Name                           Value
----                           -----
PSVersion                      5.1.19041.4522
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.4522
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Da wirst du wohl recht haben, google sagt wir sind bei 7.4.2
Member: WolleRoseKaufe
WolleRoseKaufe Jul 08, 2024 updated at 11:04:33 (UTC)
Goto Top
Auf der 5er funktioniert das obige ebenso problemlos, wenn das PS 2.0 gewesen wäre OK aber so lüppt das ohne Probleme.
Zeig doch mal Beispieldateien in den Ordnern...
Member: Rockett
Rockett Jul 08, 2024 at 11:12:58 (UTC)
Goto Top
z.B. der Ordner "RE20245145"

in dem befinden sich die Dateien:
auk_RE20245145.pdf
ln_RE20245145.pdf
dlr_RE20245145.pdf

Es wird an die richtige stelle kopiert, aber der Dateiname wird/bleibt "auk_RE20245145.pdf"
Member: WolleRoseKaufe
WolleRoseKaufe Jul 08, 2024 updated at 11:20:34 (UTC)
Goto Top
Zitat von @Rockett:

z.B. der Ordner "RE20245145"

in dem befinden sich die Dateien:
auk_RE20245145.pdf
ln_RE20245145.pdf
dlr_RE20245145.pdf

Es wird an die richtige stelle kopiert, aber der Dateiname wird/bleibt "auk_RE20245145.pdf"

Siehst du hattest nämlich oben nicht geachrieben das auch Buchstahen statt Zahlen in der Nummer vorkommen ich war davon ausgegangen daß es nur Ziffern sind und hinter der Nummer noch etwas anderes hätte vorkommen können, habe es oben darauf angepasst auf Zahlen und Buchstaben.

Auch hierfür die Demo
https://tio.run/##bY/NTsMwEITvfopVZClNwAkJ/wculIIq9YB6pShyk6Wx6tiR7RQo8O ...
Member: Rockett
Rockett Jul 08, 2024 at 11:24:03 (UTC)
Goto Top
Danke! Funktioniert jetzt wie gewünscht!
Member: Rockett
Rockett Jul 08, 2024 at 13:25:03 (UTC)
Goto Top
Kannst du mir in diesem Zuge vielleicht noch hier mit helfen? Ich hab noch dieses Script was ich anpassen muss.

foreach ($Folder in Get-ChildItem -Path $Path -Directory){
    $FileList=@()

    

    if (Test-Path -Path (Join-Path -Path $Folder.FullName -ChildPath "auk_*.pdf")){  
#Auskommentiert zur einhaltung ZUGFERD vorgaben
#        $FileList+=Get-ChildItem -Path (Join-Path -Path $Folder.FullName -ChildPath "auk_*.pdf") 
        $FileList+=Get-ChildItem -Path (Join-Path -Path $Folder.FullName -ChildPath "dlr_*.pdf")  
        $FileList+=Get-ChildItem -Path (Join-Path -Path $Folder.FullName -ChildPath "ln_*.pdf")  
        $FileList+=Get-ChildItem -Path (Join-Path -Path $Folder.FullName -ChildPath "uln_*.pdf")  

        $MergedFile=Join-Path -Path $Path -ChildPath ((Split-Path -Path $Folder -Leaf)+".PDF")  

        $Argumentlist=($FileList -Join " ")+" cat output $MergedFile"  

        Start-Process -FilePath $PdfTk -Argumentlist $Argumentlist -Wait

        if (Test-Path -Path $MergedFile){
        Move-Item -Path $Folder.FullName -Destination $Archive
        (Get-Date -uFormat "Am %Y-%m-%d um %H.%M.%S erstellt ")+$MergedFile | Out-File c:\Rechnungen\xxx\xxx_log.log -append  
}
    }
    
    
}

Hier geht es wieder um den Dateinamen, dieser ist in diesem script der Ordnername, in dem die Dateien liegen. Das müsste ich ändern in "Ordnername_Anlagen". Falls relevant, der Ordnername ist auch wieder die Rechnungsnummer "RE2024145".

Das Scipt habe ich nicht selbst geschrieben und werde nicht schlau daraus, wie der Dateiname generiert wird.
Member: WolleRoseKaufe
WolleRoseKaufe Jul 08, 2024 updated at 13:31:58 (UTC)
Goto Top
# ....
$MergedFile = Join-Path -Path $Path -ChildPath ((Split-Path -Path $Folder -Leaf)+"_Anlagen.pdf")   
# ....
Member: Rockett
Rockett Jul 08, 2024 at 13:48:25 (UTC)
Goto Top
Danke!!