In einem Ordner-Baum alle Dateien mit bestimmten Typen nach UTF-8 mit BOM konvertieren

In einem Ordner (samt Unterordner) wollte ich Dateien mehrerer Dateitypen nach UTF-8 + BOM konvertieren.

Folgendes PowerShell-Skript hat mir dabei geholfen:

foreach ( $i in Get-ChildItem -Path C:\Mein\Ordner\Pfad\* -Recurse -Include *.json, *.cs, *.cmd, *.csproj, *.csproj, *.sln, *.resx ,*.nsi, *.txt | % { $_.FullName } ) 
{
	Write-Host "Verarbeite Datei '$i'."

	$filecontents = Get-Content $i
	$Utf8BomEncoding = New-Object System.Text.UTF8Encoding($True)
	[System.IO.File]::WriteAllLines($i, $filecontents, $Utf8BomEncoding)
}

Das als „.ps1“-Datei speichern und dann direkt in einer PowerShell-Befehlszeile mit vollem Dateipfad zur „.ps1“-Datei aufrufen.

  • C:\Mein\Ordner\Pfad ist dabei der Wurzel-Ordner. Wichtig ist, dass wie oben im Skript mit \* beendet wird. (Grund)
  • Die einzelnen Dateitypen mit Komma separiert angeben, in meinem Beispiel oben waren das *.json, *.cs usw.
  • Um den gesamten Dateinamen zu erhalten, das | % { $_.FullName } ergänzen. (Grund)
  • Ursprüngliche Idee von Super User.