トップページへ

Windowsで複数ファイルの文字コードをまとめて変換する方法

小粋空間 » Programming Language » PowerShell » Windowsで複数ファイルの文字コードをまとめて変換する方法

Windowsで複数ファイルの文字コードをまとめて変換する方法を紹介します。

1.問題点

Linux上にある、文字コードがEUC-JPのファイルをWindowsにダウンロードしたのですが、EUC-JPのままでは扱いにくいため、これをまとめてShift_JISに変換したいと考えています。

Windowsでファイルの文字コードを変換するには、なんらかのスクリプトを作る必要がありますが、できれば簡単に済ませたいところです。

ということで、複数ファイルの文字コードをまとめて変換する方法を紹介します。

ここでは下記の記事を参考にさせていただきました。

2.複数ファイルの文字コードをまとめて変換する

複数ファイルの文字コードをまとめて変換するには、まず次のPowerShellスクリプトを"test.ps1"などのファイル名で"C:\tmp"フォルダに保存します。

param(
  [String]$in = "C:\tmp\before",
  [String]$out = "C:\tmp\after",
  [String]$from = "EUC-JP",
  [String]$to = "Shift-JIS"
)
$enc_f = [Text.Encoding]::GetEncoding($from)
$enc_t = [Text.Encoding]::GetEncoding($to)
  Get-ChildItem $in -recurse |
    ForEach-Object {
      if($_.GetType().Name -eq "FileInfo"){
        $reader = New-Object IO.StreamReader($_.FullName, $enc_f)
        $path = $_.FullName.ToLower().Replace($in.ToLower(), $out)
        $folder = Split-Path $path -parent
        if(!(Test-Path $folder)){
          [Void][IO.Directory]::CreateDirectory($folder)
        }
        $writer = New-Object IO.StreamWriter($path, $false, $enc_t)
        while(!$reader.EndOfStream){$writer.WriteLine($reader.ReadLine())}
        $reader.Close()
        $writer.Close()
      }
    }

次に、"C:\tmp\before"配下に、文字コードを変換したいファイルをフォルダごと配置します。

そして「スタート」→「アクセサリ」→「Windows PowerShell」→「Windows PowerShell」を右クリックして「管理者として実行」をクリック。

PowerShell画面で、下記の赤色で示したコマンドを実行します。

PS C:¥Users¥hoge> cd C:¥tmp
PS C:¥tmp> Set-ExecutionPolicy RemoteSigned
 
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピックで説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y
PS C:¥tmp> .¥test.ps1

これでafterフォルダに、文字コード変換されたファイルが出力されます。

入力および出力ファイルの文字コードを変更したい場合は、下記の行を書き換えてください。

  [String]$from = "EUC-JP",
  [String]$to = "Shift-JIS"

« 前の記事へ

次の記事へ »

トップページへ