LoginSignup
2
2

More than 3 years have passed since last update.

[バッチ] 歴史あるソースコードのバラバラの文字コードを一括変換で統一したい

Posted at

もくじ
https://qiita.com/tera1707/items/4fda73d86eded283ec4f

やりたいこと

新しいコードから昔の実績あるコードまでいろいろ含んでいるプロジェクトについて、文字コードや改行コードを統一したい。

やろうとおもった経緯

Gitでコードを管理するときに、リポジトリにpushされるコードは、文字コードが統一されているべき、ということになり、手元のそのあたりバラバラなコードの文字コードを統一したかった。

また、少数のファイルならエディタで一つずつ開いて変換、ということもできたが、ファイル数が多いため、手でやるのは非現実的、ということで、自動で一括変換かける方法を調べた。

そのときのメモ。

目標の文字コード

下記のように今回は統一したい。

  • UTF-8
  • BOMあり
  • 改行コードはCRLF(Windows形式)

やり方

サクラエディタのマクロを使用する。

サクラエディタのマクロは、サクラの独自?の.macという形式とやJscript、VBScriptなど、数種類の書き方ができるらしい。(こちら参照)
→今回はVBScriptを使用。

バッチファイルからvbsを呼ぶような形で、分担をして処理をする。
具体的には下記のような処理をそれぞれで行う。

  • バッチ

    • 自分の階層以下にあるフォルダから、指定の拡張子のファイルパスをすべて取ってくる
    • とってきたパスを、サクラエディタのexeに一つずつ渡して、サクラエディタを開く
    • 渡す際、実行するマクロを指定する(→これが下の「サクラエディタのvbsマクロ」)
  • サクラエディタのvbsマクロ

    • 開いたファイルの文字コードをUTF-8/BOMありにする
    • 開いたファイルを、UTF-8のCRLFで上書き保存する

前提

  • サクラエディタがインストールされていること。 今回試した時のサクラエディタのバージョンは「Ver.2.2.0.1」

実際のコード

convertutf8.bat
@echo off
rem -------------------------------------
rem メイン処理
rem このbatと同じフォルダ(*1)の中にある指定拡張子のファイル(*2)を
rem すべてutf-8のCRLF(BOMあり)に変換する=ファイルパスを引数にしてvbsを呼ぶ
rem -------------------------------------
for /r %%f in (*.h *.cpp *.cs) do (
call:exec_convert %%f
)
goto :convert_end

rem -------------------------------------
rem 変換実施サブルーチン
rem 同じ場所に置かれているマクロ(vbs)を実行
rem -------------------------------------
:exec_convert
echo %1
"C:\Program Files (x86)\sakura\sakura.exe" %1 -M=%~dp0convertutf8.vbs
exit /b

:convert_end
pause
convertutf8.vbs
' 使用変数
Dim filepath    ' 処理対象のファイルパス
Dim splitstr    ' 拡張子抽出のための一時変数
Dim extension   ' 処理対象のファイルの拡張子
Dim addBOM      ' BOMありなし(0:BOMなし 1:BOMあり)

' デバッグ用POPUP作成用WSHShell
set WSHShell = CreateObject("WScript.Shell")
'WSHShell.Popup "Filename is " + GetFilename, 0, "title", 1

' 今Sakuraで開いているファイルパスを取得
filepath = GetFilename

' そのファイルの拡張子を取得(splitstr(1)が拡張子になる)
splitstr = split(filepath, ".")
extension = splitstr(1)

' UTF-8、BOMありにする
ChgCharSet 4, 1

' ファイルを保存(UTF-8、CRLF)
if extension = "cmd" or extension = "bat" then
    ' バッチファイルは、UTF-8/BOMなし にする
    addBOM = 0
else
    ' その他のファイルは、UTF-8/BOMあり にする
    addBOM = 1
end if

' ファイルを保存する
FileSaveAs filepath, 4, addBOM

' ウインドウを閉じる
WinClose

使い方

  • 文字コードを統一したいファイルがあるフォルダにconvertutf8.batconvertutf8.vbsをコピーする。
  • convertutf8.batをダブルクリックして実行する。

memo

以前の記事で試した通り、batを実行する際、BOMがあると、1行目がうまく動いてくれない。
そのため、vbsで変換を行う際、batとかcmdという拡張子のファイルについてはは、BOMなしにするよう分岐させている。

→以前の記事:[バッチ/git] バッチをgitに上げてそれを他の人がクローンすると、なんか動きませんけどと言われる(gitにコミット時の改行の扱いについて)

参考

サクラエディタ ヘルプ
https://sakura-editor.github.io/help/HLP000001.html
※マクロの使い方は、このページの「コマンド概要」の各項目を開いた中にある各メニュー項目の中に書かれている。

名前を付けて保存
https://sakura-editor.github.io/help/HLP000021.html
ここの「FileSaveAs」で保存をするときに文字コード、改行コードを指定する。
(BOMありなしは指定できないので、下の「文字コードセット指定」で指定する)

文字コードセット指定
https://sakura-editor.github.io/help/HLP000297.html
(BOMのありなしを指定する)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2