もくじ
→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」**
実際のコード
@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
' 使用変数
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.bat
とconvertutf8.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のありなしを指定する)