Benutzer mit den meisten Antworten
Datei nach UTF-8 codieren und im Anschluss löschen

Frage
-
Guten Morgen,
ich möchte mit einem Powershell Script bestehende txt-Dateien nach UTF-8 codieren, das mache ich mit diesem Script:
Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" }
Damit wird die txt-Datei nach UTF-8 codiert und unter dem bisherigen Dateinamen+"-UTF8".txt im selben Verzeichnis gespeichert.
Nun würde ich gerne noch die ursprüngliche (bereits verarbeitete) Datei (-> ChildItem) löschen. Da sich im Verzeichnis mehrere txt-Dateien befinden können, die ggf. noch nicht umkodiert wurden, kann nicht einfach der gesamte Verzeichnisinhalt gelöscht werden.
Für Eure Unterstützung bereits jetzt besten Dank!
Antworten
-
$datei = Get-ChildItem *.idx | % { Get-Content $datei | Out-File -Encoding UTF8 "$($_.basename)-UTF8.idx" | Remove-Item $datei -force }
Get-ChildItem *.idx | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.idx"; Remove-Item $_ -force }
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
- Als Antwort vorgeschlagen mapi787 Mittwoch, 15. Januar 2020 16:14
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 15. Januar 2020 23:42
Alle Antworten
-
Moin,
dann lösch sie doch, was ist das Problem? Im Scriptblock des Foreach-Object können ja mehrere Anweisungen, durch Semikolon oder Zeilenwechsel getrennt, stehen. Die Datei ist ja in $_ gespeichert.
Evgenij Smirnov
-
Hi,
du pipest etwas an foreach. Wie Evgenij schon sage, kannst du doch nach dem erstellen der neuen Datei den Inhalt der pipe beliebig weiter verarbeiten. Wie man eine Datei löscht, dass sagt dir Tante google.
Übrigens, so wie du deine Umformatierung aufgebaut hast, wird nicht eine .txt umformatiert und unter "alter-name-UTF8.txt" abgespeichert, sondern dass macht er mit allen .txt Dateien, die in deinem Verzeichnis sind.
Wenn du also die neuen, umformatierten .txts im selben Verzeichnis stehen lässt, wird er sie jedes mal wieder durch die Schleife schicken, eine neue Datei erzeugen und "-UTF8.txt" dran hängen, wenn du das Skript laufen lässt.
Heißt, wenn du das löschen implementiert hast, startest mit:
"nichtUTF8.txt"beim ersten lauf wird dann daraus:
"nichtUTF8-UTF8.txt"
beim zweiten lauf wird dann daraus:"nichtUTF8-UTF8-UTF8.txt"
beim dritten:
"nichtUTF8-UTF8-UTF8-UTF8.txt"Und so weiter.
das nur als Hinweis. Daher würde ich empfehlen, die neuen Dateien entweder in ein neues Verzeichnis zu verschieben, oder deinen Suchfilter so anzupassen, dass du nur nicht umformatierte Dateien als Ergebnis erhälst.
Auf .txt matched halt alles.
Gruß
-
du pipest etwas an foreach. Wie Evgenij schon sage, kannst du doch nach dem erstellen der neuen Datei den Inhalt der pipe beliebig weiter verarbeiten. Wie man eine Datei löscht, dass sagt dir Tante google.
Danke. Wie ich bereits sagte - wenn ich's hinbekommen hätte, hätte ich nicht danach gefragt.
Den Hinweis mit der Schleife nehme ich dankbar an, die Ergebnisdaten werden bereits in einem anderen Verzeichnis abgelegt. Den Pfad dazu habe ich in meinem Post bewusst herausgenommen
-
Ich formatiere Deinen Code mal anders, vielleicht kommst Du dann selber drauf :-)
Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" }
Edit: Der Hinweis auf immer wieder erneute Verarbeitung der gleichen Dateien ist korrekt, da muß noch ein
? { $_.Name -notmatch '.*-UTF8.TXT$' }
oder vergleichbares in die Pipeline eingebaut werden.- Bearbeitet Martin Binder Dienstag, 14. Januar 2020 16:47 .....
-
nein, sorry. Ich krieg's nicht hin.
Ich versuchs am Fremdsystem zu lösen in dem ich die Daten bereits UTF-8 codiert anliefere. Das im trüben fischen dauert mir zu lange, Powershell ist nicht mein Thema
- Bearbeitet Andi Ärr Mittwoch, 15. Januar 2020 07:26
-
Dieses Forum ist eben nicht dafür da, Träume, Wünsche und Gesuche zu erfüllen. Das lernen und verstehen wollen wir dir nicht abnehmen.
-
Schon okay, alles in Ordnung. Wie man google benutzt ist mir schon bewusst, danke dafür.
Trotzdem komm' ich mit der Syntax von Powershell nicht klar und bekomme die Befehle nicht kombiniert. Ist doch aber schön wenn ihr's könnt - da bricht mir keiner ab :-)
-
Es geht hier nicht um Information Hiding, oder um blaming.
Wenn du deine versuche postet, zeigen wir dir die Fehler auf und helfen dabei, den Code zu verstehen. Eine Sprache lernt man eben nicht in 5 Minuten.Der einfachste Weg wäre z.B.
Die Suche erst in eine Variable zu übergeben.
Dann kannst du einmal den Inhalt der Variable in deiner Schleife verarbeiten und dann in einem zweiten Schritt den Inhalt der selben Variable löschen. Ganz einfach sequenziell hinter einander.
remove-item nimmt Objekte aus der pipeline an.
Also
$variable | remove-item
Der schönere Weg wäre dann, das Löschen mit in die Schleife einzubauen. Wie man das macht, hat Evgenij in seinem Post beschrieben.
Gruß
-
Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" }; Remove-Item $_ Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" }; Remove-Item Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } | ForEach-Object Remove-Item Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } ; ForEach-Object Remove-Item Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } ; ForEach-Object $_ Remove-Item Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } ; ForEach $_ Remove-Item Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } ; Remove-Item _$ Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } ; ForEach-Object {$_.RemoveItem} Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } | ForEach-Object {$_.RemoveItem} Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } | ForEach-Object {$_.RemoveItem} Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } | ForEach-Object {$_.RemoveItem} Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } ; ForEach-Object {$_.RemoveItem} Get-ChildItem *.txt | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.txt" } ; ForEach-Object RemoveItem
es gab da dein ein oder anderen Versuch, ja - das ist die Powershell-History -
-
$datei = Get-ChildItem *.idx | % { Get-Content $datei | Out-File -Encoding UTF8 "$($_.basename)-UTF8.idx" | Remove-Item $datei -force }
Get-Content : Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
das war jetzt mein letzter Versuch, ich kann nicht noch mehr Zeit damit verbrauchen und konzentriere mich auf's Fremdsystem was die Daten anliefert.
-
$datei = Get-ChildItem *.idx | % { Get-Content $datei | Out-File -Encoding UTF8 "$($_.basename)-UTF8.idx" | Remove-Item $datei -force }
Get-ChildItem *.idx | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.idx"; Remove-Item $_ -force }
Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq
- Als Antwort vorgeschlagen mapi787 Mittwoch, 15. Januar 2020 16:14
- Als Antwort markiert Denniver ReiningMVP, Moderator Mittwoch, 15. Januar 2020 23:42
-
Get-ChildItem *.idx | % { Get-Content $_ | Out-File -Encoding UTF8 "$($_.basename)-UTF8.idx"; Remove-Item $_ -force }
Evgenij Smirnov