NilsK 2.934 Geschrieben 17. Dezember 2021 Melden Teilen Geschrieben 17. Dezember 2021 Moin, du könntest auch erst mal deinen Algorithmus beschreiben, also die Logik, nach der das Skript funktionieren soll. Dadurch ließen sich evtl. holzige Wege gleich vermeiden. Gruß, Nils Zitieren Link zu diesem Kommentar
cartis 1 Geschrieben 20. Dezember 2021 Autor Melden Teilen Geschrieben 20. Dezember 2021 Gute Morgen zusammen, ich habe mich entschieden, mich über Lektüre in Powershell einzulesen. Leider komme ich aktuell nicht mehr vorwärts, weil es schon an kleinsten Stellen hapert. Da ich die Lösung relativ kurzfristig benötige, werde ich den Kopier- bzw Transferprozess der Dateien vorerst manuell durchführen müssen. Ich habe mich auch daran versucht den Algorithmus zu beschreiben, aber selbst da hakt es stark, weil ich gar nicht weiß, was ich alles umsetzen kann. Ich bedanke mich wirklich vielmals und werde hier natürlich weiterhin meinen Fortschritt hineinschreiben. Ich wünsche euch allen einen klasse Start in die Woche. Beste Grüße Cartis 1 Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 20. Dezember 2021 Melden Teilen Geschrieben 20. Dezember 2021 Moin, danke für die Rückmeldung und viel Erfolg! Eine Anmerkung noch: vor einer Stunde schrieb cartis: Ich habe mich auch daran versucht den Algorithmus zu beschreiben, aber selbst da hakt es stark, weil ich gar nicht weiß, was ich alles umsetzen kann. dann beschreibe (für dich selbst) erst mal, was du manuell tun würdest, um die Aufgabe zu lösen. Das kann für solche Aufgaben eine gute Ausgangsbasis sein, von der aus du dich dann weiter bewegst. Gruß, Nils 2 Zitieren Link zu diesem Kommentar
cartis 1 Geschrieben 20. Dezember 2021 Autor Melden Teilen Geschrieben 20. Dezember 2021 Hallo zusammen, Am 17.12.2021 um 08:38 schrieb BOfH_666: Da Du ja nur Teile der Dateinamen vergleichen möchtest, hilft es Dir vielleicht, die Dateinamen auch in ihre "Bestandteile" zu zerlegen. Und dass die Dateinamen offenbar bereits eine Struktur haben, macht es natürlich einfacher. Du könntest also z.B. den "BaseName" jeder Datei - also den Dateinamen ohne Endung - mittels -Split '_' an den Unterstrichen auftrennen und dann mittels Group-Object schon mal ganz einfach die zusammengehörigen Dateinamen ermitteln. Könnt ihr mir helfen, wie das gemeint ist? Egal wie ich Split verwenden möchte, es scheint diese Funktion nicht zu geben. Ich wäre wirklich mehr als Dankbar. Beste Grüße Cartis Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 20. Dezember 2021 Melden Teilen Geschrieben 20. Dezember 2021 vor 4 Minuten schrieb cartis: Egal wie ich Split verwenden möchte, es scheint diese Funktion nicht zu geben. Ich wäre wirklich mehr als Dankbar. Wenn es hier um Scripting geht und Code, ist es keine gute Idee, Sachen nur zu beschreiben. Du gehst ja auch nicht zur KFZ-Werkstatt und beschreibst das Problem, das Du mit Deinem Auto hast - Du bringst das Auto mit. Also poste doch einfach den Code, den Du benutzt, eventuelle Fehlermeldungen, die Du bekommst und eine kurze Erklärung, was Deiner Meinung nach nicht funktioniert wie erwartet. Ich hatte Dir weiter oben eine Doku verlinkt, die den Operator "-split" erklärt. Da sind auch immer Beispiele dabei. Probier ruhig das ein oder andere und "spiel ein bissl rum" mit den Befehlen. Man lernt eine komplexe Technologie wie PowerShell nicht in 2 Stunden. 'Das_hier_ist_ein_Beispiel' -split '_' 1 Zitieren Link zu diesem Kommentar
cartis 1 Geschrieben 20. Dezember 2021 Autor Melden Teilen Geschrieben 20. Dezember 2021 Hallo ;) Also vorab möchte ich sagen, dass ich aus der Formatierung und Layoutanleitung noch nicht so ganz schlau geworden bin bzw. ich weiß noch nich so genau wie ich das logisch umsetzen sollte, aber ich gebe mir viel Mühe, es etwas lesbarer zu gestalten. Bisher habe ich folgendes erreicht: $source="C:\Test\Dokumenten_Container"; $destination="C:\Test\Aufteilung\AF" $filter=("*_AF0*.pdf"); $Name = Get-ChildItem ($source) -filter ($filter) ($Name) -split '_' | Group-Object Liefert als Ergebnis folgende Information: Count Name Group ----- ---- ----- 5 UDE {UDE, UDE, UDE, UDE...} 5 Q {Q, Q, Q, Q...} 5 AF0001 {AF0001, AF0001, AF0001, AF0001...} 1 Chargenreinheit {Chargenreinheit} 2 00.pdf {00.pdf, 00.pdf} 4 Testdokument {Testdokument, Testdokument, Testdokument, Testdokument} 1 01.pdf {01.pdf} 1 02.pdf {02.pdf} 1 03.pdf {03.pdf} Dazu möchte ich sagen, dass ich erreichen konnte, dass das Grunddokument jetzt mit der Revisionsnummer 00 ausgetattet wird und es somit KEIN Dokument mehr ohne einer zweistelligen Revisionsnummer am Ende. Ich habe eure Tips wirklich ausgiebig gelesen. Vielleicht verstehe ich die Ansätze noch nicht so recht, dafür möchte ich mich entschuldigen. Beste Grüße Cartis Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 20. Dezember 2021 Melden Teilen Geschrieben 20. Dezember 2021 (bearbeitet) vor einer Stunde schrieb cartis: Also vorab möchte ich sagen, dass ich aus der Formatierung und Layoutanleitung noch nicht so ganz schlau geworden bin Keine Angst .... an der Stelle waren wir alle mal ... vor einer Stunde schrieb cartis: ich weiß noch nich so genau wie ich das logisch umsetzen sollte Wie Nils schon angeregt hatte, ist es - gerade bei etwas komplexeren Aufgabenstellungen - hilfreich, wenn man sich das Ganze mal aufschreibt/visualisiert. Am bestem mit einem Ablaufdiagramm/Entscheidungsbaum. vor einer Stunde schrieb cartis: Dazu möchte ich sagen, dass ich erreichen konnte, dass das Grunddokument jetzt mit der Revisionsnummer 00 ausgetattet wird Das ist sehr praktisch. vor einer Stunde schrieb cartis: Ich habe eure Tips wirklich ausgiebig gelesen. Vielleicht verstehe ich die Ansätze noch nicht so recht Nicht immer sind die Tipps, die man bekommt, auch wirklich hilfreich. Auch wir können mal falsch liegen. Am Ende entscheidest Du, welche Hilfe Dich weiterbringt und welche Tipps zu benutzen möchtest oder nicht. Die Möglichkeit, die Dateinamen an den Unterstrichen aufzutrennen, heißt ja nicht zwingend, dass das genau so auch hilfreich ist. In Deinem Fall willst Du ja vermutlich nur den variablen Teil abtrennen. Dafür kann man auch andere Methoden benutzen, wenn man damit besser zurechtkommt. Ich bin jetzt mal von den im ersten Beitrag geposteten Dateinamen ausgegangen (UDE_Q_AF0001_Testdokument.docx) und davon, dass die Versionierung auch durch einen Unterstrich vom Rest des Dateinamens abgetrennt ist. Hier mal meine Idee: $Path = 'C:\Test\Dokumenten_Container' $Filter = '*_AF0*.pdf' $FileList = Get-ChildItem -Path $Path -Filter $Filter | Select-Object -Property *, @{Name = 'PartlyFileName'; Expression = {($_.BaseName -split '_')[0..3] -join '_'}} $FileList | Group-Object -Property PartlyFileName Das Ergebnis sollte dann ungefähr so aussehen: Count Name Group ----- ---- ----- 5 UDE_Q_AF0001_Testdokument {@{PSPath=Microsoft.PowerShell.Core\FileSystem::C:\Test\Dokumenten_Container\UDE_Q_AF0001_Testdokument_00.pdf;... 3 UDE_Q_AF0002_Testdokument {@{PSPath=Microsoft.PowerShell.Core\FileSystem::C:\Test\Dokumenten_Container\UDE_Q_AF0002_Testdokument_02.pdf;... 2 UDE_Q_AF0003_Testdokument {@{PSPath=Microsoft.PowerShell.Core\FileSystem::C:\Test\Dokumenten_Container\UDE_Q_AF0003_Testdokument_00.pdf;... bearbeitet 20. Dezember 2021 von BOfH_666 1 Zitieren Link zu diesem Kommentar
cartis 1 Geschrieben 20. Dezember 2021 Autor Melden Teilen Geschrieben 20. Dezember 2021 Hallo BOfH_666, vielen herzlichen Dank. Es ist so ein interessantes Thema, dass ich absolut dabie bleiben werden, weit über dieses Script hinaus. Vielen Dank für deinen Ansatz. Jetzt versuche ich den aufzuschlüsseln und zu verstehen natürlich. Ich habe ein ähnliches Ergebnis. Wenn ich das richtig verstehe, habe ich jetzt die Möglichkeit mit dem Ergebnis weiterzuarbeiten, oder? Vielen Dank nochmals für den Link, ich mache mich gerade dran, zu beschreiben was ich eigentlich möchte Beste Grüße Cartis Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 20. Dezember 2021 Melden Teilen Geschrieben 20. Dezember 2021 vor 6 Minuten schrieb cartis: Wenn ich das richtig verstehe, habe ich jetzt die Möglichkeit mit dem Ergebnis weiterzuarbeiten, oder? Genau. Darum geht es Dir ja schließlich. Du hast jetzt die Dateien, die sich nur in der Versionsnummer unterschieden jeweils in einer eigenen Gruppe. Von da aus kannst Du - gemäß Deinem Ablaufplan - weitermachen. 1 Zitieren Link zu diesem Kommentar
cartis 1 Geschrieben 21. Dezember 2021 Autor Melden Teilen Geschrieben 21. Dezember 2021 Guten Morgen BOfH_666, guten Morgen zusammen, vielen Dank nochmals für die Hilfe. Ich habe gefühlt das halbe Internet abgesucht um zu erfahren, was ich mit der Gruppierung jetzt alles so anfangen kann., daher verstehe ich so langsam, warum ein Ablaufplan wichtig ist. Es tut mir leid, dass ich hier eure Zeit raube. Bitte glaubt mir, mein Ziel war es nicht, in dieses Forum zu kommen und mit einem fertigen Code wieder rauszuspazieren. Ich war wahrscheinlich etwas zu optimistisch, dass ich es schneller verstehen würde. Mal ein Gedankenansatz, was ich glaube jetzt damit anfangen zu müssen bzw. können. Da ich jetzt eine Auflistung habe, die mir den Dateinamen ohne Revisionierung zusammenfasst, hatte ich folgende Überlegungen: Jede "Gruppe" so filtern, dass nur noch die zuletzt bearbeitete Datei übrig bleibt. Anschließend diese Dateien dann auswählen und in den neuen Pfad kopieren. Ist der Gedanke sehr abwegig? Ich weiß nicht genau ob ich da völlig auf dem Holzweg bin. Beste Grüße Cartis Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 21. Dezember 2021 Melden Teilen Geschrieben 21. Dezember 2021 vor 2 Stunden schrieb cartis: Jede "Gruppe" so filtern, dass nur noch die zuletzt bearbeitete Datei übrig bleibt. Anschließend diese Dateien dann auswählen und in den neuen Pfad kopieren. Ist der Gedanke sehr abwegig? Ich weiß nicht genau ob ich da völlig auf dem Holzweg bin. Na, Du wolltest doch die verschiedenen Versionen, abhängig von der angehängten Versionsnummer in verschiedene Ordner kopieren/verschieben, oder? Das ist jetzt die Stelle dafür. Und dafür wäre jetzt vielleicht ... vor 2 Stunden schrieb cartis: ein Ablaufplan wichtig Zitieren Link zu diesem Kommentar
cartis 1 Geschrieben 21. Dezember 2021 Autor Melden Teilen Geschrieben 21. Dezember 2021 Hallo BOfH_666, ich habe mal mein erstes Ablaufdiagramm erstellt. Wahrscheinlich sind da noch Logikfehler enthalten, aber ich weiß natürlich nicht was so möglich ist und was nicht. Beste Grüße Cartis Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 21. Dezember 2021 Melden Teilen Geschrieben 21. Dezember 2021 Supi. Sieht dufte aus. ... aber das ist ja nur die halbe Miete, oder? Wenn ich mir nochmal den gepimpten Screenshot angucke, den Du vorher gepostet hattest, willst Du ja nicht nur einen Ordner beackern, sondern 4 oder 5. Und ging es Dir bei der Prüfung der Dateien wirklich um das "Datei-Alter" oder eher um die angehängte Versionierung? Wenn es um das Alter geht, was passiert mit gleichnamigen Dateien, die aber unterschiedliche Änderungsdaten haben? 1 Zitieren Link zu diesem Kommentar
cartis 1 Geschrieben 22. Dezember 2021 Autor Melden Teilen Geschrieben 22. Dezember 2021 Guten Morgen BOfH_666, ich danke dir wieder sehr für deine Nachricht. Da ich bis spät Abends noch an der organisation der Dateien iund optimierung des vorgelagerten Prozesses gearbeitet habe, ist mir natürlich auch noch einiges aufgefallen. Ich werde das Ablaufdiagramm nochmals anpassen. Bis später und einen super Tag wünsche ich euch :) Wie man sehen kann, gibt es kein Archiv mehr. Ich habe mir jetzt folgende Lösung ausgedacht. Die Historie bleibt im Quellordner eh bestehen. Für mich ist nur das Dokument mit der letzten Revisionierung interessant und da ich das Dokument im Idealfall ohne Revisionsnummer im Dateinamen benötige, wäre es super, wenn es gleich so abgespeichert wird. Wie könnte ich soetwas umsetzen? Beste Grüße Cartis Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 22. Dezember 2021 Melden Teilen Geschrieben 22. Dezember 2021 (bearbeitet) Es gibt einen Dokumentenschlüssel? Diese Information ist neu. Es sieht für mich so aus, als würde es am Ende immer wieder darauf hinauslaufen, dass Du die Dateien abhängig von ihrer Namensstruktur behandeln willst. Du hast also einen Ordner mit einem Haufen Dateien, die zum Teil ähnliche Namen haben und sich nur anhand der Versionsnummer unterscheiden. Diese Grüppchen sammelst Du mit der bereits erarbeiteten Logik zusammen. Wenn man das richtig macht, hat man bereits alle Infos separiert, die man für die weiteren Schritte braucht. In jeder dieser Gruppen hast Du jetzt als Elemente den Basis-Namen (den Dokumentenschlüssel arbeiten wir auch gleich mit ein) und die angehängte Versionierung. Die Angehängte Versionierung liegt aber noch nicht als "Zahl" sondern als "String" vor. Um sie zuverlässig sortieren zu können, müssen wir sie in eine Zahl wandeln und dann können wir die "Letzte" ermitteln. So hast Du die Datei ermittelt, die Du dann schließlich kopieren willst. (Achja, ich hab mal "meinen" Test-Pfad drin gelassen - so passt die Ausgabe zum Code ) $Path = 'D:\sample\Work' $Filter = '*UDE_Q_*.pdf' $FileList = Get-ChildItem -Path $Path -Filter $Filter | Select-Object -Property *, @{Name = 'PartlyFileName'; Expression = { ($_.BaseName -split '_')[0..3] -join '_' } }, @{Name = 'VersionINT' ; Expression = { [int]($_.BaseName -split '_')[4] } }, @{Name = 'DocumentKey' ; Expression = { ($_.BaseName -split '_')[2] } } $SeparatedGroupList = $FileList | Group-Object -Property PartlyFileName Hiermit hast Du alles eingesammelt, was Du brauchst. Jetzt geht's ans Sortieren: foreach ($Group in $SeparatedGroupList) { $Group.Group | Sort-Object -Property VersionInt | Select-Object -Last 1 -Property PartlyFileName, DocumentKey, VersionInt, FullName } Der Schnipsel ist quasi nur zur visuellen Kontrolle. Mit meinen Beispiel-Dateinamen sieht die Ausgabe so aus: PartlyFileName DocumentKey VersionINT FullName -------------- ----------- ---------- -------- UDE_Q_AF0001_Testdokument AF0001 4 D:\sample\Work\UDE_Q_AF0001_Testdokument_04.pdf UDE_Q_AF0002_Testdokument AF0002 3 D:\sample\Work\UDE_Q_AF0002_Testdokument_03.pdf UDE_Q_AF0003_Testdokument AF0003 1 D:\sample\Work\UDE_Q_AF0003_Testdokument_01.pdf UDE_Q_FA0001_Testdokument FA0001 2 D:\sample\Work\UDE_Q_FA0001_Testdokument_02.pdf UDE_Q_FA0002_Testdokument FA0002 4 D:\sample\Work\UDE_Q_FA0002_Testdokument_04.pdf UDE_Q_FA0003_Testdokument FA0003 1 D:\sample\Work\UDE_Q_FA0003_Testdokument_01.pdf Du hast jetzt also die jeweils "letzte" Datei aus jeder Gruppe, deren kompletten Pfad, welchen Du fürs Kopieren brauchst, den PartlyFileName, welchen Du als Ziel-DateiName benutzen kannst, und den Dokumentenschlüssel, welchen Du für die Entscheidung benutzen kannst, wohin die Datei kopiert werden soll. Also statt der Ausgabe auf der Konsole, baust Du an der Stelle eine Bedingung ein, die das Kopier-Ziel anhand des Dokumentenschlüssels festlegt, baust den gewünschten Ziel-Pfad mittels Join-Path zusammen und Kopierst die Datei ans Ziel ..... fertig. Wenn Du Dir das Leben sogar noch etwas einfacher machen möchtest, kannst Du die Zielpfade für die verschiedenen Dokumentenschlüssel im letzten Pfadelement quasi gleich dem Dokumentenschlüssel machen. Dann könntest Du Dir die Abfrage der Bedingung sparen und einfach den Dokumentenschlüssel als Bestandteil des Zielpfades benutzen. bearbeitet 22. Dezember 2021 von BOfH_666 1 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.