Help us understand the problem. What is going on with this article?

batでコードページ(エンコーディング)を変更して実行したい

More than 3 years have passed since last update.

タイトルまんま、Windowsのバッチ(bat)で文字エンコーディング(コードページ)を変更して処理をし、その後もとに戻しておきたい。
(具体的にはSQL/Plusをたたきたかった)

処理そのものはUTF-8で動かしたいけど、WindowsはShift-JISっぽい「MS932」で。。。
単純にメインの処理だけ記述していると文字エンコーディングの違いで文字化けしまくりになります。
そこで、コードページを変更して動かせばいいわけですが、普段はMS932のままで動いてほしいのでUTF-8に変わりっぱなしでは困る。

次に考えるのはコードページを変更して処理をした後にMS932に戻せばいい!
と、ここで問題。
もし元がMS932じゃなかったら。。。固定で「MS932に戻す」みたいなことをしてしまうと、それが欠陥になっちゃう。

そんなわけで、処理開始前にコードページが何になっているかバックアップしておき、希望のコードページで処理した後に「元に戻す」ようにしました。

久々にバッチを書いたw
PowerShellの方が楽だよね~

@ECHO OFF
REM === 実行モード
REM --- コードページ変更を行う(YES:1, NO:0)
SET CHCP=0
REM --- 変更後のコードページ
SET CP=932

REM === システム変数(触らないで)
SET T_CP=

REM ------------------
REM |  メインループ  |
REM ------------------
REM === コードページ変更
IF %CHCP%==1 (CALL :CHCP_ %CP%)

REM @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
REM @@@         ここに処理を記述           @@@
REM @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

REM === コードページ復元
IF %CHCP%==1 (CALL :CHCP_DEFAULT)
REM === おわり
GOTO :END_


REM ------------------
REM |  サブルーチン  |
REM ------------------
REM === コードページをSHIFT-JIS(MS932)に変更
:CHCP_
FOR /F "usebackq tokens=2 DELIMS=:" %%C IN (`CHCP`) DO SET T_CP=%%C
CHCP %1
GOTO :LOCAL_END_

REM === コードページを戻す
:CHCP_DEFAULT
CHCP %T_CP%
GOTO :LOCAL_END_


REM ------------------
REM |     おわり     |
REM ------------------
:END_
ENDLOCAL
:LOCAL_END_
EXIT /b 0
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away