PowerShell - Ändern Sie die Codierung von Dateien nach UTF-8

8

Ich versuche, eine tote einfache Sache zu tun: Dateikodierung von allem auf UTF-8 ohne BOM zu ändern. Ich habe mehrere Skripte gefunden, die das tun, und die einzige, die mir wirklich funktionierte, ist diese: Ссылка .

Es hat wie erwartet funktioniert, aber ich brauche die generierten Dateien ohne BOM. Also habe ich versucht, das Skript ein wenig zu modifizieren und die Lösung zu dieser Frage hinzuzufügen: Mit PowerShell eine Datei in UTF-8 ohne die Stückliste schreiben

Dies ist mein letztes Skript:

%Vor%

Das Problem ist, dass Powershell mir einen Fehler bezüglich der System.Text.UTF8Encoding($False) -Zeile zurückgibt, der sich über einen falschen Parameter beschwert:

Es ist nicht möglich, das Argument für den Parameter 'Encoding' zu validieren. Das Argument "System.Text.UTF8Encoding" gehört nicht zu der Gruppe "Unicode, utf7, utf8, utf32, ascii", die vom ValidateSet-Attribut angegeben wird.

Ich frage mich, ob ich etwas vermisse, wie Powershell-Version oder so ähnlich. Ich habe vorher noch nie ein Powershell-Skript programmiert, also bin ich total verloren damit. Und ich muss diese Dateicodierung ändern, es gibt Hunderte von ihnen, ich würde es nicht gerne selbst machen.

Tatsächlich verwende ich die Version 2.0, die mit Windows 7 geliefert wird.

Vielen Dank im Voraus!

BEARBEITEN 1

Ich habe den folgenden Code versucht, der von @LarsTruijens und anderen Posts vorgeschlagen wurde:

%Vor%

Das gibt mir eine Ausnahme, die sich über einen der Parameter für WriteAllLines beschwert: "Exception on calling 'WriteAllLines' with 3 arguments. The value can't be null". Parameter name: contents . Das Skript erstellt jedoch alle Ordner. Aber sie sind alle leer.

BEARBEITEN 2

Interessant an diesem Fehler ist, dass der Parameter "content" nicht null ist. Wenn ich den Wert der Variablen $ content (mit Write-host) ausgabe, sind die Zeilen da. Warum wird es also null, wenn es an die WriteAlllines-Methode übergeben wird?

EDIT 3

Ich habe der Variable eine Inhaltsüberprüfung hinzugefügt, so dass das Skript jetzt so aussieht:

%Vor%

Jetzt gibt jede Iteration die Meldung "Kein Inhalt von: $ i" zurück, aber die Datei ist nicht leer. Es gibt einen weiteren Fehler: Get-content: can't find the path 'C:\root\FILENAME.php' because it doesn't exists. Es scheint, dass versucht wird, die Dateien im Stammverzeichnis und nicht in den Unterordnern zu finden. Es scheint in der Lage zu sein, den Dateinamen von den untergeordneten Ordnern zu erhalten, aber versucht, es von der Wurzel zu lesen.

EDIT 4 - Letzte Arbeitsversion

Nach einigem Hin und Her und nachdem ich den Ratschlägen gefolgt bin, speziell von @LarsTruijens und @AnsgarWiechers, habe ich es endlich geschafft. Ich musste die Art ändern, wie ich das Verzeichnis von $ PWD bekam und einige feste Namen für die Ordner festlegen. Danach hat es perfekt funktioniert.

Hier geht es für jeden, der interessiert sein könnte:

%Vor%     
darksoulsong 08.09.2013, 14:22
quelle

5 Antworten

3

Sie haben die ganze Antwort nicht in hier . Sie haben den WriteAllLines-Teil vergessen.

%Vor%     
Lars Truijens 09.09.2013, 19:37
quelle
2

Die Hälfte der Antwort ist in der Fehlermeldung enthalten. Es teilt Ihnen die möglichen Werte mit, die der Encoding-Parameter akzeptiert, einer davon ist utf8.

%Vor%     
Shay Levy 08.09.2013 14:41
quelle
0
  1. Gehe zum gewünschten Verzeichnis cd c:\MyDirectoryWithCrazyCharacterEncodingAndUnicode
  2. Feuer dieses Skript weg!

Kopieren und hinterlegen Sie das Skript in Ihren PowerShell-Fenstern

%Vor%     
transformer 27.01.2017 08:02
quelle
0

Ich habe einige Korrekturen gemacht

  • Get-Childitem wirkt auf $ source
  • replace versucht nicht, $ source als Regex
  • zu interpretieren
  • ein Auflösungspfad
  • automatische Hilfe

und alles in ein Cmdlet gepackt:

%Vor%     
Darcon 27.12.2017 14:24
quelle
-1

Mit:

%Vor%

Nur Dateien im Unterordner $source werden verwendet.

    
Alexander Halbarth 28.01.2016 11:43
quelle