patrickhh
Goto Top

Powershell - Dateinamen Prüfung und Verschieben

Hallo liebe Community,

ich habe ein Problem und hoffe ihr könnt mir weiter helfen.

Es gibt einen Import Ordner in dem .pdf Dateien liegen. Diese werden manuell dort abgelegt und sollen/dürfen als Dateinamen nur 8 Zahlen haben (z.b. 40017153.pdf).

Nun soll mittels Script geprüft werden ob der Dateiname der Vorgabe entspricht. Wenn das Ergebnis positiv ist und der Dateiname aus 8 Zahlen besteht dann soll die .pdf Datei in einen Netzwerkordner verschoben werden, ist das Ergebnis negativ und der Dateiname beeinhalten weitere oder eine abweichende Anzahl an Zeichen so soll es in einen Ordner "Fehlerhaft" verschoben werden.

Ich habe leider keine Ahnung wie ich dies umsetzen soll, weil mein Wissen über Powershell Script schreiben noch sehr begrenzt ist.

Nachfolgend einmal grob die entsprechende Ordner der Dateien.

$quelle = .\Verbringungsnachweise\2020\01 - Import
$positiv = \\filemon\vn
$fehler = .\Verbringungsnachweise\2020\02 - Fehlerhaft

Schon jetzt, vielen Dank für eure Hilfe!

Content-Key: 546828

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

Printed on: April 23, 2024 at 17:04 o'clock

Member: Kraemer
Kraemer Feb 13, 2020 at 12:29:22 (UTC)
Goto Top
Moin,

und wo ist jetzt dein Problem?

Gruß
Member: PatrickHH
PatrickHH Feb 13, 2020 at 12:48:06 (UTC)
Goto Top
Da ich noch nicht sonderlich viel Wissen über Powershell erlangt habe, habe ich leider keine Ahnung wie ich so ein Script auszusehen hat und hoffe daher auf die Hilfe von erfahrenen Scriptern.
Member: monstermania
monstermania Feb 13, 2020 at 13:03:59 (UTC)
Goto Top
Moin,
eigentlich keine große Nummer...
- Wie stellst Du sicher dass keine doppelten Dateinamen vergeben werden?
- Woher kommen die PDF-Dateien?
- Wäre es u.U. nicht sinnvoller die Namen direkt aus der Datei zu holen!?
Member: PatrickHH
PatrickHH Feb 13, 2020 at 13:10:47 (UTC)
Goto Top
Moin,
wenn man weiß wie es geht ist es sicherlich einfach ;)

Der Dateiname wir vom Mitarbeiter manuell definiert anhand von Lieferscheinen. Da diese Bezeichnung leider nicht immer im Dokument enthalten ist muss dies von Hand ausgefüllt werden. Eigentlich sollte es bei diesen Dokumenten immer nur eines zu jedem Lieferschein geben.
Die PDF - Dateien werden dort in unregelmäßigen Abständen dort abgelegt vom Mitarbeiter.
Member: Marabunta
Solution Marabunta Feb 13, 2020 updated at 13:19:44 (UTC)
Goto Top
$quelle = ".\Verbringungsnachweise\2020\01 - Import"  
$positiv = "\\filemon\vn"  
$fehler = ".\Verbringungsnachweise\2020\02 - Fehlerhaft"  

$a=gci $quelle -Filter *.pdf -File
$a | select fullname, Name |%{

if($_.BaseName -Match '^\d{8}$'){  
Move-Item $_.fullname "$positiv" -WhatIf  

}else{
Move-Item $_.FullName "$fehler" -WhatIf  

}
}
Mitglied: 142970
Solution 142970 Feb 13, 2020 updated at 14:26:05 (UTC)
Goto Top
$quelle = ".\Verbringungsnachweise\2020\01 - Import"  
$positiv = "\\filemon\vn"  
$fehler =".\Verbringungsnachweise\2020\02 - Fehlerhaft"  
gci $quelle -File -Filter *.pdf | %{
   if($_.Basename -Match '^\d{8}$'){  
     move-item $_.Fullname  -Destination $positiv
   }else{
     move-item $_.Fullname  -Destination $fehler
   }
}
Member: Marabunta
Marabunta Feb 13, 2020 at 13:15:01 (UTC)
Goto Top
Das sollte eine gute Basis sein, Fehlerbehandlung z.B. bereits im Ziel vorhanden o.ä. wird damit nicht abgefangen.
Member: monstermania
monstermania Feb 13, 2020 at 13:51:58 (UTC)
Goto Top
Ja, schon klar. face-wink
Entweder bekommt Ihr die Verbringungsnachweise vom Spediteur, Paketdienst, usw. oder Ihr erstellt selbst welche, weil Ihr ein Logistiker seit.
Im 1. Fall übergebt Ihr ja eine Sendungsreferenz an den Logistiker. Diese steht dann auf dem Verbringungsnachweiß, den Ihr nachher vom Logistiker zurück bekommt.
Im 2. Fall wißt Ihr ja selbst, welche Nummer Ihr auf den Verbringungsnachweiß verwendet habt.

Auf jedem Fall sollte es recht einfach sein die Informationen aus den Verbringungsnachweisen und die jeweilige Refernznummer zusammen zu bekommen.
Bei meinem alten AG haben wir entsprechende Nachweise von Bursped, TNT und UPS bekommen. Ließen sich alle vollautomatisch verarbeiten und mit den Daten aus dem ERP verbinden.
Wenn man sich schon darauf verlassen soll, dass Mitarbeiter manuell irgendwelche Nummern eintragen...
Member: PatrickHH
PatrickHH Feb 13, 2020 at 14:23:04 (UTC)
Goto Top
Hallo @Marabunta,

vielen Dank für den Code. Ich habe den eben getestet mit dem Ergebnis, das leider nichts passiert.
Es werden keine .pdf Dateien verschoben.

Habe mal eine pause eingefügt und folgende Meldung erhalten.

WhatIf: Ausführen des Vorgangs "Datei verschieben" für das Ziel "Element: .\Verbringungsnachweise\2020\01 - Import\10268250.pdf Ziel: .\Verbringungsnachweise\2020\02 - Fehlerhaft".

Kannst du damit etwas anfangen?


Hallo @142970,

auch deinen Code habe ich probiert und folgenden Fehler erhalten.

move-item : Der Pfad ".\Verbringungsnachweise\2020\10268411.pdf" kann nicht gefunden werden, da er nicht vorhanden ist.
In .\Verbringungsnachweise\2020\vn_import.ps1:9 Zeichen:6
move-item $_ -Destination $positiv
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : ObjectNotFound: (.\Verbringungsnachweise\2020\10268411.pdf:String) [Move-Item], ItemNotFoundException
FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand


Wenn ich die pdf Dateien in den Ordner 2020 liegen habe, dann funktioniert es.

Wo muss ich da was anpassen?
Mitglied: 142970
Solution 142970 Feb 13, 2020 at 14:25:01 (UTC)
Goto Top
Tippfehler
Member: erikro
erikro Feb 13, 2020 at 14:37:54 (UTC)
Goto Top
Moin,

Zitat von @PatrickHH:
WhatIf: Ausführen des Vorgangs "Datei verschieben" für das Ziel "Element: .\Verbringungsnachweise\2020\01 - Import\10268250.pdf Ziel: .\Verbringungsnachweise\2020\02 - Fehlerhaft".

Der Parameter -whatif weist die PS an, den Befehl nicht auszuführen, sondern eine Meldung auszugeben, was passiert, wenn man ihn ausführen würde. Die Meldung heißt also, dass die Datei mit dem Pfad, der hinter "Element" steht, in das Verzeichnis, das hinter "Ziel" steht verschoben worden wäre. Also alles gut. Nimm das -whatif hinter den Befehlen weg und er macht das dann auch gnadenlos. face-wink

hth

Erik