とりわけファイルシステム上のディレクトリの名前を変更するPowerShellスクリプトがあります。名前を変更しようとしているディレクトリの一部には、名前に英語以外の文字が含まれており、スクリプトの実行が終了すると、これらのフォルダーの名前が文字化けします。問題を説明するためのサンプルスクリプトを作成しました。
$NewDir = New-Item -Path "c:\" -Name "New Directory" -ItemType "directory"
Write-Host "Created Directory - " $NewDir.FullName
$RenamedDir = Rename-Item -Path "c:\New Directory" -NewName "Yeni Direktör" -PassThru
Write-Host "Renamed Directory - " $RenamedDir.FullName
次のコマンドを使用して、Windowsバッチファイルを介してこのスクリプトを起動しています。
powershell.exe -executionpolicy remotesigned -file "PowerShellInternationalRenameExample.ps1"
スクリプトの実行が終了すると、名前が「YeniDirektör」(トルコ語で「NewDirectory」)の名前が変更されたディレクトリの代わりに、結果のディレクトリの名前が「YeniDirektör」になります。文字化けしないようにディレクトリの名前を変更するにはどうすればよいですか?
編集-Notepad ++によると、スクリプトファイル自体はUTF-8でエンコードされています
PowerShellは、 バイト順マーク(BOM) がないとUTF-8ファイルのエンコードを正しく推測しません。
たとえば、スクリプトをNotepad ++に渡し、メニューエンコーディングで「Encodein UTF-8-BOM」を指定すると、ファイルが修正されます。 BOMバイトが本当にファイルの先頭に追加されたかどうかを確認することをお勧めします。
これを試して:
$NewDir = New-Item -Path "c:\" -Name "New Directory" -ItemType "directory"
Write-Host "Created Directory - " $NewDir.FullName
$RenamedDir = Rename-Item -Path "c:\New Directory" -NewName "Yeni Direkt`ör" -PassThru
Write-Host "Renamed Directory - " $RenamedDir.FullName
特殊文字のエスケープ