phloeoner
Goto Top

Datum aus Dateiname.pdf auslesen und in neuen Ordner nach Monat speichern

Hallo Schwarmintelligenz!

Diese oder ähnliche Fragen gab es bestimmt schon zuhauf. Ich brauche Hilfe. Ich habe jetzt 4 Stunden damit verbracht bei GitHub Copilot ein Script erstellen zu lassen, aber ohne Erfolg. Ich habe mehr von der KI erwartet, aber wenn man kein Plan vom scripten hat, so wie ich, kann das nix werden. Ansatzweise hat es mal besser, mal schlechter geklappt. Kam aber nicht zum Ziel.

Folgendes, ich brauche ein Script das mir das Datum aus Dateinamen_DD.MM.YY.pdf in einem Quellordner auslesen kann und die Dateien in einem neuen Zielordner nach MM-YY sortiert abspeichert.

Ich selber habe vor vielen Jahren ein wenig mit Batch experimentiert, das ist mir aber verloren gegengen.

MfG Phloe

Content-ID: 670799

Url: https://administrator.de/forum/datum-aus-dateiname-pdf-auslesen-und-in-neuen-ordner-nach-monat-speichern-670799.html

Ausgedruckt am: 26.02.2025 um 12:02 Uhr

151183
Lösung 151183 19.01.2025 aktualisiert um 21:26:40 Uhr
Goto Top
Powershell
$source = "c:\quelle"  
$destination_base = "c:\ziel"  
Get-ChildItem -Path $source -File -Filter *.pdf -Recurse | ?{$_.Basename -match '(\d{2})\.(\d{2})$'} | move-item -Destination {(New-Item -ItemType Dir -Path (join-path $destination_base "$($matches[1])-$($matches[2])") -Force).FullName} -verbose  
Gruß gastric

Tante Edit: Tippfehler behoben
PhloeOner
PhloeOner 19.01.2025 um 22:28:00 Uhr
Goto Top
Ich habe die Quell- und Zielordner eingetragen.

Funktioniert leider nicht das Script...
151183
151183 19.01.2025 aktualisiert um 22:56:58 Uhr
Goto Top
Hatte nen Tippfehler nachträglich behoben , klappt hier einwandfrei, hier auch noch der Beweis
Online-Demoskript (tio.run)

Works as designed, und so wie du oben geschildert hast! Monat und Jahr auslesen und damit einen entsprechenden Ordner benannt als "MM-YY" erstellen und dort hinein verschieben.
PhloeOner
PhloeOner 19.01.2025 um 23:19:54 Uhr
Goto Top
Danke!
PhloeOner
PhloeOner 19.01.2025 um 23:22:24 Uhr
Goto Top
Ich habe noch ein wenig mit GitHub Copilot rumgespielt und basierend deines Scrips dies hier entwickelt:
$source = "C:\Quelle"  
$destination_base = "C:\Ziel"  

# Get all PDF files in the source path recursively
Get-ChildItem -Path $source -File -Filter *.pdf -Recurse | ForEach-Object {
    # Check if the file name contains the pattern dd.mm.yy (day.month.year)
    if ($_.BaseName -match '\d{2}\.\d{2}\.\d{2}') {  
        # Extract the day, month, and year from the file name
        $matches = [regex]::matches($_.BaseName, '\d{2}\.\d{2}\.\d{2}')  
        $date = $matches[0].Value
        $day, $month, $year = $date -split '\.'  

        # Debugging: Output the extracted date parts
        Write-Output "Found file: $($_.Name) with date: $day.$month.$year"  

        # Create the destination directory path using the month and year
        $destinationPath = Join-Path -Path $destination_base -ChildPath "$month-$year"  

        # Create the destination directory if it doesn't exist 
        if (-not (Test-Path -Path $destinationPath)) {
            Write-Output "Creating directory: $destinationPath"  
            New-Item -ItemType Directory -Path $destinationPath -Force | Out-Null
        }

        # Move the file to the destination directory
        Write-Output "Moving file: $($_.FullName) to $destinationPath"  
        Move-Item -Path $_.FullName -Destination $destinationPath -Verbose
    } else {
        # Debugging: Output if the file does not match the date pattern
        Write-Output "File $($_.Name) does not match the date pattern"  
    }
}

Jetzt isses perfekt!
Thx PhloeOner
DivideByZero
DivideByZero 20.01.2025 aktualisiert um 02:04:43 Uhr
Goto Top
Moin,

und so wurden dank KI aus wenigen Zeilen ganz viele 😉
Der Einzeiler läuft ja, aber so ist es ausführlich und für Dich sicherlich auch besser nachvollziehbar. Das Problem mit KI ist, dass man die richtigen Fragen stellen muss, denn ansonsten ist das Skript inhaltlich so simpel, dass Copilot oder ChatGPT das tatsächlich aus dem Ärmel schütteln. Also kannst Du das auch bei künftigen Änderungen da immer mal wieder probieren.

Und da Dein akutes Problem gelöst ist, bitte auch an Wie kann ich einen Beitrag als gelöst markieren? denken und @151183 dabei bitte bedenken.

Gruß

DivideByZero