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-ID: 61083428810

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

Ausgedruckt am: 06.10.2024 um 10:10 Uhr

13676056485
Lösung 13676056485 08.07.2024 aktualisiert um 13:11:03 Uhr
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
Rockett
Rockett 08.07.2024 aktualisiert um 12:27:32 Uhr
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
erikro
erikro 08.07.2024 um 12:34:37 Uhr
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
13676056485
13676056485 08.07.2024 aktualisiert um 12:56:31 Uhr
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.
Rockett
Rockett 08.07.2024 um 13:00:43 Uhr
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
13676056485
13676056485 08.07.2024 aktualisiert um 13:04:33 Uhr
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...
Rockett
Rockett 08.07.2024 um 13:12:58 Uhr
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"
13676056485
13676056485 08.07.2024 aktualisiert um 13:20:34 Uhr
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 ...
Rockett
Rockett 08.07.2024 um 13:24:03 Uhr
Goto Top
Danke! Funktioniert jetzt wie gewünscht!
Rockett
Rockett 08.07.2024 um 15:25:03 Uhr
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.
13676056485
13676056485 08.07.2024 aktualisiert um 15:31:58 Uhr
Goto Top
# ....
$MergedFile = Join-Path -Path $Path -ChildPath ((Split-Path -Path $Folder -Leaf)+"_Anlagen.pdf")   
# ....
Rockett
Rockett 08.07.2024 um 15:48:25 Uhr
Goto Top
Danke!!