【Windows PowerShell】エンコードを一括変換する

Powershellエンコード一括変換する機会があったので方法を紹介します。

 

お客様のサイトの、全てのphpファイルのエンコードを「S-JIS」から「UTF8」にするという作業がありました。その際、ファイル数が多かったので、 Powershellエンコード一括変換しました。

 

せっかくなので使用したプログラムを汎用的に利用できるようにし、掲載します。

※ご利用される際は、バックアップ後に自己責任でご利用ください。

 

【仕様】

・指定した拡張子のファイルを、一括でエンコード変換します。

・設定値を変更することで、エンコード対象となるファイルの種類(拡張子)、エンコードの種類、ファイルパスを自由に変更できます。

 

【使用方法】

0.ファイルをバックアップしてください。

1.$extensionに、エンコードを一括変更したいファイルの拡張子を設定します。

2.$encodeに、変更後のエンコードを設定します。

3.$path に、変更したいファイルを格納しているパスを絶対パスで設定します。

4.サイトページの使用上、プログラム内のダブルクォーテーションが全角に変換されているため、半角に一括置換してください(汗

5.Windows PowerShellでプログラムを実行します。

 

#————————————————–
#
# エンコード一括変更
# 2016/10/29 ver 1.0
#
#————————————————–

#=============================
#【設定】START
#=============================

#————————————————–
# エンコードを変更する対象ファイルの拡張子
# ex. $file = “html”
#————————————————–
$extension = “php”

#————————————————–
# エンコード指定
#————————————————–
$encode = “UTF8”

#————————————————–
# エンコードを変更するファイルの格納先ディレクトリ
# ※再帰的にエンコードを行うので注意してください。
#————————————————–
#$path = “C:\change_encode”

#=============================
#【設定】END
#=============================
#【処理】START
#=============================

#変数定義
$extension_tmp = $extension + “.tmp”
$file = “*.” + $extension
$file_tmp = “*.” + $extension_tmp
$dot = “.”

#対象ファイルの階層までディレクトリを移動
cd $path

#バックアップフォルダを作成
$now = date -format “yyyy-MM-dd-HH-mm”
$bak_folder = “bak_” + $now
mkdir $bak_folder
#ファイルの一括バックアップ
Get-ChildItem . -Recurse -Include $file | %{cp $_ $bak_folder}

#ファイルをtmpファイルに変更
Get-ChildItem -Name | Rename-Item -NewName { $_ -replace ($dot + $extension), ($dot + $extension_tmp)}

#対象ファイルのエンコードを一括変更する
Get-ChildItem . -Recurse -Include $file_tmp | ForEach-Object {Get-Content $_.FullName | Out-File -Encoding $encode ($_.FullName -replace ($dot + $extension_tmp), ($dot + $extension))}

# tmpファイルを一括削除
del $file_tmp

#=============================
#【処理】end
#=============================

 

Windows PowerShellの本

PowerShellを勉強するなら手元に本があるとなお便利です。