Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.046
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von BOfH_666

  1. 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.
  2. 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?
  3. ... is ja nich so, als gäbe es sowas gar nicht mehr ... https://www.nokia.com/phones/en_int/nokia-150 Falls Interesse besteht ... gibt's bei Amazon für unter 50 Euronen ... vielleicht spricht man dann auch wieder öfters miteinander ...
  4. 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 ...
  5. OMG ... jetzt geht die übliche REGEX-Haarspalterei los ... .. .eigentlich haben wir dafür zu wenig Info von Dirk. Also denn ... angenommen der Dateiname ist länger und komplexer ... $BaseName = 'BlaKeksDateiG1234undsoweiterg12349876Ende' $BaseName -match '(?<Prefix>.*)(?<GNumber>G\d+)(?<Suffix>.*)' $Matches ... liefert ... Name Value ---- ----- Suffix Ende GNumber g12349876 Prefix BlaKeksDateiG1234undsoweiter 0 BlaKeksDateiG1234undsoweiterg12349876Ende Die gewünschten Bestandteile sind enthalten, Prefix und GNumber liefern aber nicht die Ergebnisse, die laut Frage erwartet werden.
  6. 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.
  7. Keine Angst .... an der Stelle waren wir alle mal ... 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. Das ist sehr praktisch. 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;...
  8. 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 '_'
  9. Na das hättest Du auch gleich sagen können. $BaseName = 'DateiG1234' $BaseName -match '(?<FesterTeil>Datei)(?<VariablerTeil>G\d{4})' $NewBaseName = $Matches.VariablerTeil + $Matches.FesterTeil | Out-Null $NewBaseName
  10. ... ich war mir da nicht ganz sicher ... deshalb frug ich lieber nochmal nach. Ich konnte mir nicht erklären, warum man das an dieser Stelle auf diese Weise abkürzen sollte.
  11. Supi. Klingt wie ein guter Plan. Und wobei brauchst Du da jetzt Hilfe?
  12. Das ist ein bissl nebulös. Wobei genau brauchst Du denn Hilfe? ... und auch wenn Du die Frage hier beriets im Scripting-Forum gestellt hast ... ist das eine regelmäßige Aufgabe? Falls nicht, tun es vielleicht auch Tools wie TotalCommander oder FreeCommander oder irgend ein Multi-Rename-Tool. Die können so was auch. Falls es ein Script sein soll, wäre meine Empfehlung es mit PowerShell zu machen. Wenn Du in dieser Richtung einen Schubs möchtest, beginnst Du vielleicht mit den folgenden Doku-Themen: Get-ChildItem Foreach-Object Move-Item Where-Object about_Comparison_Operators
  13. ... vorher nass machen, nicht vergessen!!
  14. ... huch ... ich glaube, ich hatte ein paar Weinbrandbohnen zu viel ....
  15. Vielleicht für den Anfang noch ein ganz allgemeiner Tipp: Du machst Dir und anderen das Leben leichter, wenn Du Deinen Code leicht lesbar schreibst. Dazu gehört unter anderem das ein oder andere Leerzeichen zwischen Variablen, Operatoren und Werten, Parameternamen möglichst explizit anzugeben, "sprechende" Variablennamen, Zeilenumbrüche, wo sie die Lesbarkeit erhöhen und Einrückungen. Hier nochmal ein bissl was zum Nachlesen: The PowerShell Best Practices and Style Guide 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. Eventuell hilfreich für Deine Aufgabe könnten auch noch calculated Properties sein. Damit kannst Du Objekten Eigenschaften hinzufügen, die sie noch nicht von selbst haben .... about_Calculated_Properties.
  16. Nein. Genau das meinte ich. Den ersten Lesestoff hat Dir Jan weiter oben ja bereits genannt. Weiter hilfreich ist dann bestimmt auch noch das hier: about_Split about_If about_Switch everything_about_Switch ... ich freu mich schon auf Deinen ersten Code.
  17. Zur Unterstützung der Fehleranalyse könntest Du regelmäßig "von außen" die eingestellte Zeit abfragen. So könnte man wenigstens ermitteln wann, die Zeit wieder umgestellt wird.
  18. Hmmm ... ja - man könnte das per PowerShell machen, aber was mir noch fehlt, ist die Info was denn dann mit den kopierten/verschobenen Dateien jeweils am Zielort gemacht werden soll.
  19. ... oder dism /online /Get-CurrentEdition zeigt (unter anderem) auch die Edition an ... das geht auch in CMD.
  20. Hmmm ... läuft das nicht auf ein einfaches Backup hinaus? Wenn Du die Quelldateien nicht "ausdünnen" darfst, macht es vermutlich auch keinen Sinn, weniger als den aktuellen Status zu sichern, oder? Vermutlich schon ... solange Du klar formulieren kanns, was genau Du möchtest, kann man es vermutlich in Code umsetzen.
  21. ... und die zugreifenden Konten auf dem NAS berechtigen ist keine Option?
  22. ... nur ne Idee ... könnte es sein, dass IrfanView ein Problem damit hat, wenn es nicht in einer interaktiven Session läuft?
  23. Ich dachte das galt nur, wenn Du von Sensei Miyagi san Karate oder Master Pai Mei Kung Fu lernen willst.
  24. ... nur, um es wenigstens einmal erwähnt zu haben: Wenn Du jetzt anfängst zu programmieren oder skripten, solltest Du nicht mehr mit VBS oder CMD anfangen. Such Dir ein gutes Einsteiger-Tutorial oder Buch für PowerShell und starte damit. Das wird Dir auf lange Sicht, ne Menge verschwendete Zeit und Frustration ersparen.
×
×
  • Neu erstellen...