テキストエディタでスクリプトを作成し、PowerShellやPowershell ISEで実行すると
「文字列に終端記号がありません」というエラーが出る原因と対処法を紹介します。
実行環境
- PowerShell: 5.1.19041.1682
- テキストエディタ: VS Code
エラーの原因「文字コード」
私の環境ではVS Codeで作成したファイルはUTF-8で保存されるよう設定されていました。
一方でPowerShellはデフォルトだとShift-JISで解釈するらしく、
文字コードの不一致が発生し当該エラーである「終端記号がありません」が発生していたようです。
Microsoft「VS Code と PowerShell でのファイルのエンコードの概要」2022年8月11日取得
対処法「エンコードを変えるか日本語を使わない」
私のコードでは入力待ちの際に表示する文言を日本語で入力していました。
$target_dir = Read-Host "対象のディレクトリを入力"
このスクリプトは私1人が使用するものなので、英語でも問題なかったので
$target_dir = Read-Host "Enter target dir"
と変更してスクリプトが動作するようになりました。
複数人でスクリプトを使い、オペレーション的な理由で英語は使いたくないという場合は
スクリプトを保存するときの文字コードを変えてあげましょう。
VS Codeの場合画面右下のほうに現在使用中の文字コードが表示されている部分があります。
そこをクリックしてエンコード付きで保存 > UTF-8 With BOMを選択すると
文字化けせずに日本語が使えるようになります。