dalmatino 10 Geschrieben 25. November 2014 Melden Teilen Geschrieben 25. November 2014 Hi Leute, ich versuche mich gerade mit Powershell und stehe etwas auf dem Schlauch. Brauche etwas Unterstützung bzw. eure Fachkompetenz. Folgendes Szenario: In einem Ordner liegen mehrere XML-Dateien. In diesen Dateien gibt es das Element CompCode. Anhand der CompCode-Nummer (1001 oder 1019) soll die Datei entweder in einen anderen Ordner verschoben werden oder nicht. Das Ganze soll dann auch Zeitabhängig geschehen. Für die CompCodes gibt es unterschiedliche Verarbeitungszeitspannen. (Soweit bin ich aber noch nicht. Ich versuche Stückweise meinem eigentlichen Ziel näher zu kommen.) Ich möchte also in die Dateien gucken und herausfinden, welcher CompCode drin steht. Wenn jetzt z.B. 1001 drin steht, soll diese in den Ordner "Move" verschoben werden, wenn nicht, soll sie bleiben wo sie ist. In meinem Ansatz, werden alle Dateien verschoben... Damit ich testen kann, habe ich jetzt anstelle des move Befehls eine Textausgabe erstellt. cd d:\check $source = "d:\check\*.xml" $srcstrg = gci $source $destination = "d:\check\move\" # $uhrzeit = get-date -Format 'HH:mm' $CC1 = "<CompCode>1001</CompCode>" $CC2 = "<CompCode>1019</CompCode>" $string = Get-ChildItem $source | Select-String -pattern "$CC1" foreach ($file in $srcstrg) { if ($string -Match "$CC1") {write-host "wird verschoben"} else {write-host "wird nicht verschoben"} } wird verschoben wird verschoben wird verschoben wird verschoben Man sollte meinen, es ist eine simple Aufgabe, aber ich breche mir gerade ziemlich einen ab :( Bin für jeden Tipp dankbar! Grüße Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 25. November 2014 Melden Teilen Geschrieben 25. November 2014 Dein $string vergleicht alle Dateien, deine Schleife geht aber durch die Dateien einzeln. Zitieren Link zu diesem Kommentar
dalmatino 10 Geschrieben 25. November 2014 Autor Melden Teilen Geschrieben 25. November 2014 Richtig wäre dann also "foreach ($file in $string)" ? Als Ausgabe kommt dann nur noch "einmal, "wird verschoben". Was jetzt in diesem Fall richtig ist, da es nur in einer Datei drin steht. Aber ich bin jetzt eigentlich davon ausgegangen, dass für die anderen drei Dateien dann die andere Ausgabe kommt. Bin gerade Mega verwirrt. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 25. November 2014 Melden Teilen Geschrieben 25. November 2014 Das $file in $srcstrg stimmte schon, aber du musst deine Suche nach dem String (Select-String) _in_ der der Schleife machen. Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 25. November 2014 Melden Teilen Geschrieben 25. November 2014 ...und Du mußt auf XML umstellen statt auf String-Vergleich... :nene: Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 26. November 2014 Melden Teilen Geschrieben 26. November 2014 Müssen nicht, da ein ein XML auch nur ein großer String ist. Für einen einfachen Vergleich reicht auch ein String Vergleich. Zitieren Link zu diesem Kommentar
dalmatino 10 Geschrieben 26. November 2014 Autor Melden Teilen Geschrieben 26. November 2014 Hi und danke für die richtigen Gedankengänge! @daabm: Warum muss ich? So scheint es zu funktionieren: cd d:\check $source = "d:\check\*.xml" $srcstrg = gci $source $destination = "d:\check\move\" $uhrzeit = get-date -Format 'HH:mm' $CC1 = "<CompCode>1001</CompCode>" $CC2 = "<CompCode>1019</CompCode>" foreach ($file in $srcstrg) { $result = Get-ChildItem $file | Select-String -pattern "$CC1" if ($result -Match "$CC1") {move-item $file $destination} else {write-host "nothing to do"} } Jetzt taste ich mich langsam ran, dies Zeitabhängig zu machen. Werde bestimmt wieder auf euch Cracks zurückkommen :) Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 26. November 2014 Melden Teilen Geschrieben 26. November 2014 Weil Du's dann zukünftig kannst -. und weil Du Datenbanken ja auch nicht als flat file einliest und dann nach Strings durchsuchst. Oder doch :confused: Nee, machst Du nicht, gelle? :D Zitieren Link zu diesem Kommentar
dalmatino 10 Geschrieben 26. November 2014 Autor Melden Teilen Geschrieben 26. November 2014 Ich hatte bereits einen Versuch mit "select-xml" und "x-path", falls du wen Weg meinst. Da ja meine Schleife an sich nicht funktionierte, habe ich mich dann wieder auf die "einfachere" Variante gestürzt :) Naja, von können kann noch nicht die Rede sein :D Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 26. November 2014 Melden Teilen Geschrieben 26. November 2014 Das meinte ich ;) Wie gesagt: Wenn Du ein mdb/dbf/... hast, dann lädst Du das auch nicht in notepad... 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.