Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.098
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von BOfH_666

  1. vor 2 Stunden schrieb daabm:

    Motorola Micotac - das einzige "Handy", das man in der Kneipe in jedem beliebigen Glas versenken konnte, weil es einfach überall rein gepasst hat :ghost::grins2:

    Hmmmm .... da gab es aber noch kleinere Modelle ... oder wie meinst Du das mit dem "Handy"?  .... ich kann mich an mein Nokia 6230 erinnern. Das hätte bestimmt in eine Kölner Stange gepasst.  :achtung:

  2. vor 1 Stunde schrieb Warlord205:

    Sorry, dachte BOfH brauchte den gesamten Ordnerinhalt ?

    :rolleyes: .... als Datei-Anhang!!! 

     

    Du machst mich fertig. Und darauf habe ich keine Lust mehr. Mal sollen die Daten im Ziel-Ordner in Unterordnern mit Datumsformat sortiert sein, mal wieder nicht. Mal sollen im Quell-Ordner nur Zip-Dateien liegen, dann soll die Script-Datei im Quell-Ordner liegen. Dann sollen die Log- und Bild-Dateien in Unterordnern liegen, die die Fahrzeugnummer als Name haben, dann liegen sie aber offenbar in Unterordnern davon. So kann man nix automatisieren. Selbst wenn ich Dich bitte, eine Vorher- und Nachher-Beispiel-Datei-Struktur zu posten, kommt da nur wirrer Daten-Müll. Sowas macht mir schlechte Laune und das will ich nicht. Sorry, ich bin raus.

    • Danke 1
  3. Hmmm ... schade, dass Du nur einen Teil meiner Fragen beantwortest und schade, dass Du den Teil, den Du beantwortest, nur zum Teil beantwortest und weiterhin schade, dass wir uns jetzt doch wieder alle nötigen Einzelheiten mühsam zusammenklamüsern müssen. Und schade, dass mein Code-Beispiel überhaupt nicht kommentiert wurde. :nosmile:

     

    vor 2 Stunden schrieb Warlord205:

    Sorry!!! :D Wobei tatsächlich der größte Teil Code nur "reinkopiert" ist, das ist der Teil hinter "# 2) Zielverzeichnis auswählen" weil ich da einen, für meine Ansprüche sehr schönen FolderSelectionDialog" gefunden habe. Der ursprüngliche Code war nur:

    Das heißt also, dass Du Code von irgendwo her holst und den ausführst, obwohl Du den vermutlich gar nicht verstehst und Dir auch nicht sicher sein kannst, dass er nur das macht, was Du möchtest.  ;-) 

     

    vor 2 Stunden schrieb Warlord205:

    Und da hat mich sehr gestört das ich immer wieder "MyComputer" starten musste und es keine Adress-zeile gab.

    Ist der Quell- oder der Ziel-Ordner dynamisch? Also ändern sich diese Ordner immer wieder? Wenn nicht - wozu dann ein Auswahl-Dialog?

     

    vor 2 Stunden schrieb Warlord205:

    Ich kann gerne meine Erklärungen weiter ausführen sofern das hilft, weiß leider nur nicht genau wie.

    Stell Dir einfach vor, Du musst es Deinem Opa erklären und er soll die Aufgabe erledigen. 

     

    vor 2 Stunden schrieb Warlord205:

    Der Fahrzeug-Typ und die Fahrzeugnummer sind leider  nur in den ".zip" enthalten. Nicht in den Bild- oder Log-Dateien.

    Das ist aber eine essenzielle Info ... denkst Du das nicht auch? Sind den pro Fahrzeugnummer mehrere Fahrzeugtypen möglich? (Ja, ich meine das so herum) Ist die Unterscheidung nach dem Fahrzeugtyp in der Ordnerstruktur überhaupt nötig? Hat  das im Dateinamen codierte Datum bei den Zip-Dateien wirklich ein anderes Format als in den Bild- und Log-Dateien?? Deine Beschreibung und die Screenshots lassen das vermuten.  YYMMDD versus YYYYMMDD ???!!!

     

    vor 2 Stunden schrieb Warlord205:

    Ich versuche mal mit dem Bild meine Ordnerstruktur aufzuzeigen:

    Hmmm ... Screenshots sind selten hilfreich, wenn es um Informationen geht, die auch textuell transportiert werden können.  Ein in eine Text-Datei exportiertes Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName ...  , einmal vom Quell- und einmal vom Ziel-Ordner wär wirklich hilfreich. Diese Dateien kannst Du hier posten.    

    Und übrigens ...  die Ordnerstruktur sieht bei jeder neuen Antwort von Dir anders aus. Einmal sind die Log- und Bild-Dateien in BBBBB-Ordnern, dann wieder in cuted\BBBBB-Ordnern. Es würde helfen, wenn Du Dir erst mal selbst darüber klar wirst, was Du eigentlich genau möchtest.

     

     

  4. Wow .... nachdem ich das gelesen hatte und auch versucht hatte, den Code zu verstehen, musste ich mich erstmal ne Weile sammeln und versuchen wieder geradeaus zu denken. ;-) Ich hab dann erstmal aufgegeben, zu versuchen, den Code zu verstehen.  :shock2: ;-)  Ich hab schon ne ganze Weile nicht mehr so ein unstrukturiertes Vorgehen gesehen.

     

    vor 4 Stunden schrieb Warlord205:

    Es sind Datenlogger die in diversen Fahrzeugen verbaut sind. Diese werden an einen zentralen Rechner via Ethernet ausgelesen und legen die Daten mit dem Namen AAA_BBBBB_YYMMDD_HHMM im .ZIP Format in dem "Messdaten" Verzeichnis ab. Der zentrale Rechner erstellt dann automatisch im Verzeichnis "Messdaten" einen Unterordner mit namen "BBBBB" in welchem aus der .ZIP datei automatisch bestimmte Dateien herausgesucht und entpackt werden.

    Es wird also auf dem zentralen Rechner bereits eine Verarbeitung der Daten vorgenommen, richtig? Warum werden die Daten dort nicht "fertig" verarbeitet? Mit welchem Tool/Prozess werden die Daten dort vorverarbeitet? Warum wird dieser Prozess nicht dahingehend erweitert, dass das Ergebnis dem gewünschten entspricht.

     

    Im Grunde geht es also darum, Dateien anhand ihrer Namensbestandteile in verschiedene Ordner zu verschieben, richtig? Dafür gibt es bereits mindestens hunderte Beispiele überall dort zu finden, wo man solche Fragen findet. Also PowershellGallery, StackOverflow, Powershell.org oder MSFT Technet ScriptGallery  usw.  ... oder eben sogar hier im Forum ... schonmal dort oder hier nach Beispielen gesucht?  ;-)   ... man muss das Rad ja nicht immer und immer wieder neu erfinden.

     

    vor 4 Stunden schrieb Warlord205:

    Das BulkRenameUltility sieht für mich ehr aus als würde es Dateien umbennen und verschieben. Das ist jedoch nicht mein Ziel. Der Dateiname muss erhalten bleiben.

    Dazu noch ein Wort: Es haben sich also ziemlich schlaue Leute die Mühe gemacht, ein ziemlich aufwändiges Tool zu programmieren, um den Prozess des Umbenennens und Verschiebens von Dateien zu vereinfachen. Könnte es da nicht möglich sein, dass das Tool so flexibel gestaltet wurde, dass man eventuell einen der Schritte weglassen könnte, wenn man ihn grad mal nicht braucht? ... also z.B. man Dateien nur verschiebt und nicht umbenennt .....  ;-);-) Vielleicht lohnt sich ja doch ein zweiter etwas intensiverer Blick auf das Tool.

     

    OK ... jetzt zum eigentlichen Problem ... die Daten liegen also unstrukturiert vor (ja, ich sehe, dass da ein Struktur existiert, aber die hilft uns nicht, weil wir sie nicht nutzbringend verwenden können.)

    Wenn ich es richtig verstanden habe - Deine Erklärungen/Beispiele sind in diesem Punkt einigermaßen vage - haben alle Dateien, also sowohl die Zip-Dateien wie auch die Bild- und Log-Dateien, im Datei-Namen den Fahrzeugtyp, die Fahrzeugnummer, das Datum und die Zeit "codiert". Wie Du Dateinamen an den vorhandenen Trennzeichen aufsplittest, hast Du also schon gelernt. Dann brauchst Du doch jetzt nur noch die Bestandteile zu benutzen, um den gewünschten Zielordner zusammenzubauen. Also wenn das wirklich alles ist, sollte der folgende Schnipsel ausreichen ...

    $SourceFolder = 'C:\Messdaten'
    $TargetFolder = 'C:\Zielverzeichnis'
    
    Get-ChildItem -Path $SourceFolder -File -Recurse |
    ForEach-Object {
        $SplittedFileName = $_.BaseName -split '_'
        $CarType = $SplittedFileName[0]
        $CarNumber = $SplittedFileName[1]
        $Date = $SplittedFileName[2]
        if ($_.Extension -eq '.zip') {
            $Destination = 
            $TargetFolder, $Date, ($CarType + '-' + $CarNumber), 'Messdaten' -join '\'
            if(-not (Test-Path -Path $Destination -PathType Container)){
                New-Item -Path $Destination -ItemType Directory
            }
            Move-Item -Path $_.FullName -Destination $Destination
        }
        else {
            $Destination = 
            $TargetFolder, $Date, ($CarType + '-' + $CarNumber), 'Cut-Daten' -join '\'
            if (-not (Test-Path -Path $Destination -PathType Container)) {
                New-Item -Path $Destination -ItemType Directory
            }
            Move-Item -Path $_.FullName -Destination $Destination
        }
    }

    Wie immer .... bitte vorher mit Test-Daten testen und ich übernehme keine Garantie für gar nix.  :thumb1:

    • Danke 1
  5. vor 2 Stunden schrieb testperson:

    P.P.S.: Gibt es hier theoretisch eigentlich einen "korrekten" Standard?

    Was wirklich Offizielles gibt es meines Wissens nicht. Ich verwende inzwischen meistens die Formatierung, die der PS-ScriptAnalyzer in VSCode automatisch vorgibt ... Scripter sind halt tendenziell eher faul.  :cool:

     

    Das Einzige, was in Richtung "Standard-Werk" geht ist, glaube ich, The Unofficial PowerShell Best Practices and Style Guide.

     

    Edit: Seit PS 7 kann man ja sogar die Pipe in die nächste Zeile rücken und es läuft trotzdem noch .... very strange  :shock2: Das macht es zwar manchmal einfacher eine einzelne Zeile während des Debuggings einfach mit F8 auszuführen ohne auf die folgende Pipe achten zu müssen, aber es sieht irgendwie komisch aus.

    • Danke 1
  6. vor 2 Stunden schrieb daabm:

    @BOfH_666 Du bist bestimmt jetzt nicht böse, oder? ;-) Und rock stable ist es auch nicht - bei New-Item würde es abkacken, wenn der Zielordner schon existiert :smile2:

    Du hast es runiniert!!!!  :angry2:  ...   neee  :lool:  :aetsch2:  ... und für "rock stable" ist der Empfänger zuständig ... nicht die kreativen Problemlöser-Köpfe, die hier die Ideen liefern  ... die können sich nicht mit so profanen Dingen wie Error-Handling oder so'n Schmus aufhalten lassen ....  :rofl:  :cool:  :victory:

  7. Dennis, hallo und willkommen ... 

     

    Weil wir irgendwann vermutlich sowieso dahin kommen  ... erzählst Du uns bitte gleich, woher die Daten kommen und warum sie neu in andere Ordner sortiert werden sollen?  

     

    vor 2 Stunden schrieb Warlord205:
     

    ich suche ein Skript, um Dateien anhand des Dateinamens bzw. Ordnernamens zu verschieben.

    Du suchst .... !?  ... und wie wär's mit selber schreiben?  ;-) 

    Zitat

    Habt ihr eine Idee für mich?

    ich würde damit anfangen, die Grundlagen von Powershell zu erlernen. 

    Zitat

    Ich schaffe es irgendwie nicht den Unterordner "BBBBB" zu erkennen und die Daten entsprechend dann in die Zielverzeichnisse einzusortieren :(

    Was hast Du denn schon versucht?  ... und wo hast Du denn schon überall gesucht? Solche oder ähnliche Fragen wurden quer durchs Internet und auch hier schon gefühlt tausendfach gestellt und beantwortet.  Das letzte Mal ist hier im Forum - wie Martin schon oben bemerkt hat - nicht lange her.

     

    Und es muss auch nicht immer ein Script sein ...  im oben bereits verlinkten Thread ist auch ein Hinweis auf das "Bulk Rename Utility" ... das kann sowas auch https://www.bulkrenameutility.co.uk/#mainscreen .

  8. vor 3 Minuten schrieb testperson:

    Was waren das noch für Zeiten, als die Hersteller versuchten (Mobil) Telefone so klein wie möglich zu bauen. :)

    Da waren Telefone aber auch noch fast ausschließlich zum Telefonieren da  ... dafür werden die meisten Smartphones ja heutzutage am wenigsten benutzt.  ;-) 

  9. vor 10 Minuten schrieb daabm:

    ...meistens nicht mal das, weil ja kein Anlass da ist. Oma sitzt einfach da, schaut aus dem Fenster und rührt in der Kaffeetasse, die schon seit Stunden leer ist ;-)

    ... und wenn sie der Opa dann fragt "Hast Du was gesagt?", antwortet sie nur "Nein, das war gestern" ....   :rofl:

    • Haha 1
  10. vor 25 Minuten schrieb LEDZEPPELIN:

    Vielen vielen Dank fürs Angebot.

    Im Anhang ein Liste.txt Datei eines Ordners in dem sich nur noch die Dateiformate wie oben beschrieben befinden.

    Die anderen Typen habe ich rauskopiert.

    Da kümmere ich mich manuell drum.

     

    Ist nur ein Test Ordner. In der Realität reden wir von ca. 6000 Dateien.

    Liste.txt 764 B · 3 downloads

    Mir geht's da wie Martin - ich sehe auch ein Muster.  Wir suchen also nach *,mkv-Dateien, und den im Namen dazu passenden *.nfo-Dateien und im Namen dazu passenden *.jpg-Dateien, die aber noch fanart und poster angehängt haben.

    Wenn die Dateinamen wirklich diesem Schema entsprechen, sollte der folgende Schnipsel, das tun, was Du willst  (also das, von dem ich glaube, dass Du es willst)  ....

    $StartFolder = 'D:\Test'
    $TargetFolder = 'D:\Archiv'
    Get-ChildItem -Path $StartFolder -File -Filter *.mkv |
    ForEach-Object {
        $BaseName = $_.BaseName
        $Destination = Join-Path -Path $TargetFolder -ChildPath $BaseName
        if (-not(Test-Path -Path $Destination -PathType Container)) {
            New-Item -Path $Destination -ItemType Directory | Out-Null
        }
        Move-Item -Path $_.FullName -Destination $Destination
        $nfo = Join-Path -Path $_.Directory -ChildPath ($_.BaseName + '.nfo')
        Move-Item -Path $nfo -Destination $Destination
        $poster = Join-Path -Path $_.Directory -ChildPath ($_.BaseName + '-poster.jpg')
        Move-Item -Path $poster -Destination $Destination
        $fanart = Join-Path -Path $_.Directory -ChildPath ($_.BaseName + '-fanart.jpg')
        Move-Item -Path $fanart -Destination $Destination
    }

    ... bitte erst an Test-Daten testen!!  ;-) 

  11. vor 12 Minuten schrieb LEDZEPPELIN:

    Das Progamm von Dir sieht sehr kompliziert aus und scheint uf den ersten Blick auch primär fürs umbennen zu sein.

    Deine Aufgabe ist ja auch sehr komplex. Mit regulären Ausdrücken (regular Expressions) kann man sehr komplexe Auswahl-Kriterien erzeugen und es wäre sehr wahrscheinlich noch ein teilweise manueller Prozess. Aber er macht die Sache leichter.

  12. Wenn's quasi ne einmalige Aktion sein soll, finde ich Damians Vorschlag in Deinem Fall nicht schlecht.  ;-)  ... geht eventuell schneller und ist am Ende weniger Arbeit.

     

    vor 22 Minuten schrieb LEDZEPPELIN:

    Also die Dateien sehen fast alle so aus wie oben beschrieben 

    Ja, genau da ist das Problem - "... sehen fast alle so aus ..." ;-) 

     

    vor 24 Minuten schrieb LEDZEPPELIN:

    (und die paar auf die es nicht passt würden doch ignoriert oder?)

    Das kommt darauf an - eventuell eben nicht. 

     

    N' Vorschlag zu Güte ... und weil bald Weihnachten ist:

     

    Wenn es nicht gerade Pornos sind und auch sonst keine irgendwie kompromittierenden Sachen und Du bereit wärst, die Informationen hier mit uns zu teilen, dann poste doch hier einfach mal ne *.txt-Datei mit der kompletten Datei-Liste und wir können versuchen was zusammenzuzimmern.  ;-)

     

    vor 30 Minuten schrieb LEDZEPPELIN:

    Das sieht dann in etwas so aus oder?

     

    > ('Name.ts').split(".-")[0]
    Name

    > ('Name.mkv').split(".-")[0]
    Name
    > ('Name-fanart.jpg').split(".-")[0]
    Name

    > ('Name-poster.jpg').split(".-")[0]
    Name

     

    Code als Code formatieren bitte! ;-)   ....  und wenn Du wissen möchtest, ob eine Idee von Dir funktioniert, kannst Du's einfach testen.  ... nicht gleich Kopieren oder Verschieben, sondern erstmal nur die Ergebnisse ausgeben lassen   ;-)  

  13. vor 7 Minuten schrieb LEDZEPPELIN:

    Würde das gehen?

    Es geht alles, was Du so formulieren kannst, dass es auf ALLE Dateien im Verzeichnis passt. Wenn Du bei ALLEN *.jpg-Dateien die letzten 7 Zeichen ignorieren kannst, geht es. Aber je komplexer Dein Regelwerk wird, desto fragiler und anfälliger für Fehler wird es auch. Und Deine Beispiele sehen bisher jedes mal anders aus.  ;-) 

  14. vor 49 Minuten schrieb LEDZEPPELIN:

    Dein Skript würde fast passen, ich habe aber auch Leerzeichen in den Dateinamen, z.B. Ich bin arm dran und Dein Skript hört nach den ersten gemeinsamen Buchstaben auf.

    So dass der Ordnername dann Ich wäre, und nicht wie gewünscht Ich bin arm dran.

    Das ist, was ich mit "Regel" meinte. Wenn es nicht möglich ist, die Kriterien in einem technischen Algorithmus zu formalisieren, sondern ein "kreativer Akt" oder semantisches Verständnis nötig ist, dann ist das mit einem Script vermutlich nicht so einfach lösbar. 

     

    vor 41 Minuten schrieb LEDZEPPELIN:

    jep. Und es ist auch "Meine". Nix gesaugt oder so.

    11 jahre aufgezeichnet und jetz soll Ordnung gemacht werden.

    Also sinnvollere Namen kann ich denen glaub ich nicht mehr geben im nachhinein.

    Dann ist es wohl am zielführendsten, wenn Du die entsprechend "vorsortierst". Also die zusammengehörigen Dateien in ein Verzeichnis und dann das Script starten. 

  15. vor 8 Minuten schrieb LEDZEPPELIN:

    Die Regel wäre bis zum ersten Zeichen, dass nicht in allen Dateien identisch ist.

    Im Beispiel also nach dem Leerzeichen nach Auto.

    .... aber es sind ja offenbar nicht nur Dateien im Ordner, die mit Auto anfangen, oder? Also würden schon Dateien die mit "B" anfangen Deiner Regel widersprechen ... ;-) 

     

    Lass doch mal folgendes Schnipsel bei Dir laufen und schau, ob das ungefähr dem entspricht, was Du an Ordnernamen haben wollen würdest:

    $StartFolder = 'D:\Test'
    Get-ChildItem -Path $StartFolder -File |
        ForEach-Object {
            $_.Name -match '([a-z]*)' | Out-Null
            $Matches[1]
        }

     

  16. vor 17 Minuten schrieb LEDZEPPELIN:

    Das der Pfad zu den Zeichen dazugehört wußte ich nicht.

     

    Mal sehen wie es aussieht wenn ich aus der 7 eine 12 mache.

    Hat funktioniert.

     

    Yeaaahhh ... ich glaub, den Groschen hab ich jetzt bis hier fallen gehört.  ;-) :D 

    Zitat

     

    Das ist wahrswcheinlich nicht machbar oder?

    Es ist ALLES machbar, was Du scripten kannst. ;-) Du kannst das beliebig komplex gestallten und haarklein auf Deine Umgebung zuschneidern.  Ich bin nur etwas skeptisch, ob Du schon die nötigen Kenntnisse hast.   ... und ich bin mir nicht sicher, ob wir schon das "komplette Bild" von Dir gezeigt bekommen haben.

    vor 9 Minuten schrieb LEDZEPPELIN:

    Nein, leider keine Konstante.

    Mal ne Klammer, mal eine Zahl, mal ein Minus etc.

    Gibt es irgendeine "Regel", die Du formulieren könntest, um einem Unbeteiligten zu erklären, wo jeweils die Grenze zu ziehen wäre?

     

    Edit: Nach der jetzigen Beschreibung würde ich vermuten: Alle Zeichen bis zum ersten "Nicht-Wort-Zeichen" oder eher [a-z]* ... wenn Du verstehst, was ich meine.  ;-) 

  17. vor 40 Minuten schrieb LEDZEPPELIN:

    Und was sagt mir das?

    
    PS C:\Windows\system32> $AnzahlZeichen = 7
    $StartFolder = 'D:\Test'
    
    foreach ( $Test in Get-ChildItem -Path $StartFolder  -File ) { 
        $Test.FullName
        $Test.FullName.Substring(0, $AnzahlZeichen ) 
    }
    D:\Test\Dateienverschieben.bat
    D:\Test

     

    Schade. Ich hatte gehofft, dass Du es so erkennen kannst.

     

    Du hast also im Ordner "D:\Test" Dateien, deren 7 Anfangsbuchstaben, Du für die Erstellung eines neuen Ordners benutzen möchtest. Die erste Datei ist offenbar "Dateienverschieben.bat" der komplette Pfad der Datei ist "D:\Test\Dateienverschieben.bat". Und von diesem kompletten Pfad - von $Test.FullName, benutzt Du die ersten 7 Zeichen!!!!  Was sind die ersten 7 Zeichen vom kompletten Pfad? :hmmm: Richtig - "D:\Test".  :achtung: Und das ist der Grund, warum nicht das passiert, was Du erwartest.  ;-)

  18. Mit $AnzahlZeichen = 7 und dem Start-Ordner D:\Test kann da auch nicht viel passieren. ;-)  

     

    Lass Dir doch einfach mal die Werte ausgeben, mit denen das Script arbeitet. Bestimmt fällt es Dir dann auf.  

    $AnzahlZeichen = 7
    $StartFolder = 'D:\Test'
    
    foreach ( $Test in Get-ChildItem -Path $StartFolder  -File ) { 
        $Test.FullName
        $Test.FullName.Substring(0, $AnzahlZeichen ) 
    }

     

  19. vor 1 Minute schrieb LEDZEPPELIN:
    
    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In Zeile:6 Zeichen:5
    +     Move-Item -Path $Test.FullName -Destination $Rechnung.FullName.Su ...
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull
     

     

    .... siehe meine Antwort von oben ....  Du musst $Rechnung in $Test ändern!!! 

     

    ... und übrigens, wenn Du 5 gleiche Fehlermeldungen erhältst, genügt es, wenn Du eine davon postest.  ;-) 

×
×
  • Neu erstellen...