はじめに
今回は、nkf
を使用して、指定したフォルダ配下の指定拡張子ファイルを再帰的にSJIS
からUTF-8
へ変換するバッチファイルを作ってみる。
環境
Windows 11 Pro
コマンドプロンプト
nkf 2.1.5
前提条件
nkfのダウンロードとインストール
nkf
はWindowsでも利用可能な文字コード変換ツール。以下からダウンロードして使用する。
※バッチファイルと同じフォルダにnkf.exeを配置
※または環境変数PATHに追加
nkfの動作確認
# nkfのバージョン確認
nkf --version
# ヘルプ表示
nkf --help
バッチファイルの作成
基本版の作成
まず、基本的なSJIS
からUTF-8
変換バッチファイル sjis2utf8.bat
を作成する。
@echo off
setlocal enabledelayedexpansion
rem 引数チェック
if "%~1"=="" (
echo 使用方法: %~nx0 ^<対象フォルダ^> ^<拡張子^>
echo 例: %~nx0 C:\myproject txt
echo 例: %~nx0 "C:\my folder" csv
exit /b 1
)
if "%~2"=="" (
echo 使用方法: %~nx0 ^<対象フォルダ^> ^<拡張子^>
echo 例: %~nx0 C:\myproject txt
echo 例: %~nx0 "C:\my folder" csv
exit /b 1
)
set "TARGET_DIR=%~1"
set "FILE_EXT=%~2"
rem 対象フォルダの存在確認
if not exist "%TARGET_DIR%" (
echo エラー: 対象フォルダが見つかりません: %TARGET_DIR%
exit /b 1
)
rem nkfの存在確認
nkf --version >nul 2>&1
if errorlevel 1 (
echo エラー: nkfが見つかりません。nkf.exeをPATHに追加するか、同じフォルダに配置してください
exit /b 1
)
echo SJISからUTF-8への変換を開始...
echo 対象フォルダ: %TARGET_DIR%
echo 対象拡張子: %FILE_EXT%
echo.
set "CONVERTED_COUNT=0"
set "ERROR_COUNT=0"
rem 拡張子にワイルドカードが含まれていない場合は追加
set "SEARCH_EXT=%FILE_EXT%"
echo %SEARCH_EXT% | findstr /r "\*" >nul
if errorlevel 1 (
set "SEARCH_EXT=*.%FILE_EXT%"
)
rem ファイルを再帰的に検索して変換
for /r "%TARGET_DIR%" %%f in (%SEARCH_EXT%) do (
if exist "%%f" (
echo 処理中: %%f
rem 一時ファイルを作成
set "TEMP_FILE=%%f.tmp"
rem nkfでSJISからUTF-8へ変換
nkf -w "%%f" > "!TEMP_FILE!" 2>nul
if !errorlevel! equ 0 (
rem 変換成功時、元ファイルを置き換え
move "!TEMP_FILE!" "%%f" >nul 2>&1
if !errorlevel! equ 0 (
echo 成功: %%f
set /a CONVERTED_COUNT+=1
) else (
echo エラー: ファイル置き換えに失敗 %%f
del "!TEMP_FILE!" >nul 2>&1
set /a ERROR_COUNT+=1
)
) else (
echo エラー: 文字コード変換に失敗 %%f
del "!TEMP_FILE!" >nul 2>&1
set /a ERROR_COUNT+=1
)
)
)
echo.
echo 変換結果:
echo 成功: %CONVERTED_COUNT% ファイル
echo エラー: %ERROR_COUNT% ファイル
echo.
echo 変換処理が完了しました
pause
使用方法
# テキストファイルを変換
sjis2utf8.bat "C:\myproject" txt
# CSVファイルを変換
sjis2utf8.bat "C:\data" csv
# スペースを含むパスの場合
sjis2utf8.bat "C:\My Documents\project" txt
トラブルシューティング
nkfが見つからない場合
nkf
コマンドが見つからないエラーが発生した場合
nkfのダウンロードとインストール
- https://www.vector.co.jp/soft/win95/util/se295331.html からダウンロード
- nkf.exeをバッチファイルと同じフォルダに配置
- または環境変数PATHにnkf.exeのフォルダを追加
- PATHの確認 echo %PATH%
- nkfの動作確認
nkf --version
文字化けが発生する場合
- ファイルが既に
UTF-8
の場合は変換不要 BOM
の有無を確認する- エンコーディングが
SJIS
以外の可能性がある
アクセス権限エラー
- 管理者権限でコマンドプロンプトを実行
- ファイルが他のプログラムで開かれていないかを確認
- 読み取り専用属性が設定されていないかを確認
ファイルが処理されない場合
- 拡張子の指定が正しいかを確認
- ファイルパスにスペースが含まれる場合はダブルクォートで囲む
- 対象フォルダに該当ファイルが存在するかを確認
注意事項
nkfについて
nkf
は日本で開発された文字コード変換ツール。
Windowsでも利用可能で、SJIS
、EUC-JP
、UTF-8
、JIS
などの相互変換が可能。
バックアップの重要性
元ファイルを上書きするため、重要なファイルは事前にバックアップを取ること。
nkfのオプション
使用しているnkf
のオプション
-w
: UTF-8で出力
※ コマンドを変えることで改行コードをCRLF
→LF
にすることも可能
参考
nkf - Network Kanji Filter
https://osdn.net/projects/nkf/nkf (Windows版) - Vector
https://www.vector.co.jp/soft/win95/util/se295331.htmlWindows バッチファイル リファレンス
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands文字エンコーディング - MDN Web Docs
https://developer.mozilla.org/ja/docs/Glossary/Character_encoding
おわりに
nkf
を使って文字コードを一括で変換するバッチを作成した。nkf
に依存する形となるが、bat
自体は簡素になるのでこの方法が良いと考えた。bat
については生成AIにつくってもらっている。