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%Sie haben die ganze Antwort nicht in hier . Sie haben den WriteAllLines-Teil vergessen.
%Vor%cd c:\MyDirectoryWithCrazyCharacterEncodingAndUnicode
Kopieren und hinterlegen Sie das Skript in Ihren PowerShell-Fenstern
%Vor%Mit:
%Vor% Nur Dateien im Unterordner $source
werden verwendet.
Tags und Links utf-8 powershell encoding batch-file