Zum Hauptinhalt springen
  1. Braindump/

PowerShell – Datei-Encoding (rekursiv) ändern

1 min
Marcel Ryser
Autor
Marcel Ryser
Softwarearchitekt und Tech-Enthusiast aus Bern

Manchmal steht man vor dem Problem, dass Dateien das falsche Encoding haben. Wenn auf deiner Maschine PowerShell installiert ist – was oft der Fall ist – geht das ganz einfach.

Beispiel: Du willst das Encoding jeder .java-Datei im aktuellen Verzeichnis und allen Unterverzeichnissen von utf-8 nach iso-8859-1 ändern:

Get-ChildItem . -include *.java -recurse | ForEach-Object {
  $inputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
  $outputEncoding = [System.Text.Encoding]::GetEncoding("iso-8859-1")
  $content = [System.IO.File]::ReadAllText($_.Fullname, $inputEncoding)
  [System.IO.File]::WriteAllText($_.Fullname, $content, $outputEncoding)
}

In der Variable $inputEncoding setzen wir das Encoding aller Quelldateien. Mit $outputEncoding setzt du das Ziel-Encoding, in das konvertiert werden soll. Gültige Encoding-Namen findest du in dieser Tabelle: http://msdn.microsoft.com/en-us/library/86hf4sb8.aspx.

Get-ChildItem ähnelt dem find-Befehl unter Unix. Mit Get-Help Get-ChildItem siehst du weitere Infos, wie du Dateien gezielter findest.