epsodus 3 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 Hallo zusammen, ich beschäftige mich noch nicht lange mit PowerShell und habe jetzt ein Problem, vielleicht kann mir jemand helfen. Ich habe in einem Verzeichnis mehrere Dateien, mal 10 oder auch mal mehr. In diesen Dateien möchte ich die erste Zeile entfernen. dazu verwende ich den folgenden Code: $file = "$Test_ROOT\*.xml" (Get-Content $file | Select-Object -Skip 1) | Set-Content $file Das funktioniert, wenn im Verzeichnis eine Datei liegt. Sind es mehrere, dann werden die Dateien vom Inhalt größer. es sieht so aus, als wenn der Inhalt der vorhergehenden Datei mit eingefügt wird. kann mkir jemand dazu etwas sagen oder helfen ? MfG. Volker Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 (bearbeitet) Get-ChildItem -Path $Test_ROOT -File -Filter *.xml | ForEach-Object { (Get-Content -Path $_.FullName | Select-Object -Skip 1) | Set-Content -Path $_.FullName -Encoding UTF8 } Ich würde hier mal mit ForEach-Objekt arbeiten und für die Auflistung der Dateien Get-ChildItem. Edit: Ausgebessert bearbeitet 30. Januar 2020 von MurdocX Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 (bearbeitet) Get-ChildItem -Path $Test_ROOT -Filter *.xml | ForEach-Object { $ContentOhneErsteZeile = Get-Content -Path $_.FullName | Select-Object -Skip 1 $ContentOhneErsteZeile | Out-File $_.FullName } .... sollte reichen ... Da XML-Dateien aber eigentlich keine einfachen Text-Dateien sondern strukturierte Daten sind, sollte man sie normalerweise auch als solche behandeln. Ooops ... der Jan war wieder schneller bearbeitet 30. Januar 2020 von BOfH_666 Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 vor 12 Minuten schrieb BOfH_666: Ooops ... der Jan war wieder schneller Schneller ist nicht immer besser. Ich hab schon einen Fehler bei mir gefunden Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 vor 4 Minuten schrieb MurdocX: ... Ich hab schon einen Fehler bei mir gefunden Da kann der OP gleich ein bissl Debugging üben ... super. Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 30. Januar 2020 Autor Melden Teilen Geschrieben 30. Januar 2020 Hallo, erst einmal Danke. ich habe jetzt folgendes mal getestet. $file = "c:\Power" Get-ChildItem -Path $file -Filter *.xml | ForEach-Object { $ContentOhneErsteZeile = Get-Content -Path $_.FullName | Select-Object -Skip 1 $ContentOhneErsteZeile | Out-File $_.FullName } Dabei kommt folgendes raus: Originalfile: Testfile1.xml Größe:726 und Testfile2.xml Größe:726 nach dem Script: Testfile1.xml Größe: 1208 und Testfile2.xml Größe: 1208 Das Ergebnis ist wie vorher Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 Moin, hier tut Olafs Code, was er soll. Vielleicht kommen wir den Dingen auf die Spur, wenn du einen Trockenlauf machst und die Inhalte erst mal nur im Fenster ausgibst: Get-ChildItem -Path $Test_ROOT -Filter *.txt | ForEach-Object { $ContentOhneErsteZeile = Get-Content -Path $_.FullName | Select-Object -Skip 1 $_.FullName $ContentOhneErsteZeile '****** ' } Gruß, Nils Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 30. Januar 2020 Autor Melden Teilen Geschrieben 30. Januar 2020 Hallo, jetzt bin ich etwas sprachlos. Benutze ich Olafs Code, dann ist es wie oben beschrieben. Benutze ich Dein Script, mit Ausgabe im Fenster, dann sieht es richtig aus. >> Running (powertest.ps1) Script... >> Platform: V5 64Bit (STA) C:\Power\Testfile1.xml <Document xmlns="urn:iso:std:iso:20022:tech:xsd:auth.031.001.01"> <FinInstrmRptgStsAdvc> <StsAdvc> <MsgRptIdr>TH308xx353602</MsgRptIdr> <MsgSts> <Sts>CRPT</Sts> <VldtnRule> <Id>Error in processing the submission: The end-tag for element type "UnitPric" must end with a '>' delimiter.</Id> </VldtnRule> <MsgDt>2020-01-28</MsgDt> </MsgSts> </StsAdvc> </FinInstrmRptgStsAdvc> </Document> ****** C:\Power\Testfile2.xml <Document xmlns="urn:iso:std:iso:20022:tech:xsd:auth.031.001.01"> <FinInstrmRptgStsAdvc> <StsAdvc> <MsgRptIdr>TH308xx353602</MsgRptIdr> <MsgSts> <Sts>CRPT</Sts> <VldtnRule> <Id>Error in processing the submission: The end-tag for element type "UnitPric" must end with a '>' delimiter.</Id> </VldtnRule> <MsgDt>2020-01-28</MsgDt> </MsgSts> </StsAdvc> </FinInstrmRptgStsAdvc> </Document> ****** *** PowerShell Script finished. *** >> Execution time: < 1 second >> Script Ended Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 Wie sieht es aus, wenn du mein Skript verwendest? Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 30. Januar 2020 Autor Melden Teilen Geschrieben 30. Januar 2020 Hallo MurdocX, Dein Script funktioniert Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 Moin, ich habe "mein Skript" (das ja Olafs ist) mal um eine Ausgabe in eine Datei erweitert (also im Prinzip Olafs Ausgabezeile wieder eingefügt). Da funktioniert es genauso und tut, was es soll: Der Inhalt der Datei ist ohne die erste Zeile drin. Allerdings: Die Dateigröße ist verdoppelt. Ich nehme mal an, dass die PowerShell den ANSI-Text meiner Beispieldateien implizit in Unicode wandelt. Das wird man sicher auch beeinflussen können, dazu fehlt mir aber die Zeit. Kann es sein, dass es bei dir in Wirklichkeit auch so ist? Gruß, Nils Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 vor 3 Minuten schrieb NilsK: Ich nehme mal an, dass die PowerShell den ANSI-Text meiner Beispieldateien implizit in Unicode wandelt. Set-Content und Out-File nehmen default, laut Microsoft Zitat: "The default value is UTF8NoBOM". Das bestätigt deine Annahme. @epsodus Welche Kodierungen haben deine XML-Dateien? Zitieren Link zu diesem Kommentar
epsodus 3 Geschrieben 30. Januar 2020 Autor Melden Teilen Geschrieben 30. Januar 2020 Hm, also, wenn ich ein Verzeichnis habe, wo alle Dateien vorhanden sind, dann funktioniert MurdocX Script wunderbar. In meinem Script wird jede Datei auf den Dateinamen geprüft, gibt es eine Übereinstimmung mit einem Platzhalter, dann wird die Datei verschoben und umbenannt. An diesem Punkt setze ich euer Script ein. Move-Item -path $DTCC_ROOTFILE -Destination $DTCC_ACKNACKXML -Force Rename-Item -Path $DTCC_ACKNACKXMLFILE -NewName $ACKNACKXML_NEWFILE "Die Datei " + $DTCC_FILE + " wurde nach " + $DTCC_ACKNACKXML + " verschoben und umbenannt in: " + $ACKNACKXML_NEWFILE $file = "$DTCC_ROOT\*.xml" Get-ChildItem -Path $file -File -Filter *.xml | ForEach-Object { (Get-Content -Path $_.FullName | Select-Object -Skip 1) | Set-Content -Path $_.FullName -Encoding UTF8 } $TESTPATH_ACKNACKXMLFILE = Test-Path $DTCC_ACKNACKXMLNEWFILE if ($TESTPATH_ACKNACKXMLFILE -eq $TRUE) { Copy-Item -Path $DTCC_ACKNACKXMLNEWFILE -Destination $DTCC_SAMMELCOPY "Die Datei " + $ACKNACKXML_NEWFILE + " wurde kopiert nach " + $DTCC_SAMMELCOPY } Dabei kommt jetzt folgendes raus, die original Dateigröße ist 726, nach dem Scriptlauf sieht die Größe jetzt wie folgt aus: Datei1 wird zuerst überprüft und verschoben, dann Rename und dann kommt Euere Scriptteil zum Einsatz. Danach noch ein copy ins andere Verzeichnis jetzt wird Datei2 dann 3 dann 4 behandelt. Datei1 726 Datei2 606 Datei3 549 Datei4 482 Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 Moin, und das sagt uns jetzt was? Gruß, Nils Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 30. Januar 2020 Melden Teilen Geschrieben 30. Januar 2020 Gerade eben schrieb NilsK: und das sagt uns jetzt was? .... das grüble ich auch grade ... ... es wäre vielleicht eine gute Idee, nochmal strukturiert zu erklären, was Du eigentlich machen willst und warum. 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.