0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

バッチファイルで複数のテキストファイルを読込ませて1つのテキストファイルに出力させるときにハマった話

Posted at

最初に言っておきます。本件は未解決です。ただ、経緯だけでも誰かの助けになればと思ったので記録しておきます。

環境:Windows10 Pro 1909

  • やりたいこと

 あるディレクトリに入っている複数のSQLファイルを、1つのファイルにまとめたい。

 ファイルがたくさんあるので一括でやりたいのでバッチファイルで結合するようにしたかった。

バッチファイルは何度も書いたし、すぐに出来るだろうと考えていたらなかなかにハマったので記録する。

  • 用意したもの

 普通のテキストエディタで作ったSQLファイル

 ・createA.sql

 ・createB.sql

  ・

  ・

 ・FileJoin.bat

 ※中身は日本語のコメントがついたCreate文

とりあえず出力を繋げちゃおうということで、ファイルの中身を標準出力に表示する「type」コマンドをファイルにリダイレクトする形で作ってみる。

# FileJoin.bat
REM ~
REM ヘッダーコメント
REM ~

REM バッチファイルのカレントディレクトリへ移動
PUSHD %~DP0
REM ●ディレクトリパラメータ指定
SET SQLDIR=%~d0%~p0
SET TABLEDIR=table
for /r %SQLDIR%%FUNCTIONDIR% %%i in (*.sql) do (
  type %%i >> make_functions.sql	//ここで~.sqlファイルに内容を追記してる
)

REM 以下略
  • あれ、日本語が文字化けした

 なぜか日本語のコメント部分が”くぁwせdrftgyふじこlp(※解読不能)”になってしまった。(アルファベットのコード部分は問題なし)

 とりあえず出来たファイルと元となったファイルを確認する。

 ①Windowsのメモ帳(Notepad.exe)で開く。

 →普通。特に何もなし

 ②よくあるテキストエディタで開く。(今回はsakuraを使用)

 →普通。何も…あれ?

 いくつもファイルを開いてみるとそれぞれの、文字コードが違う???

  • ファイルの文字コードは?

 とりあえずファイル毎に文字コードを確認していくと、SJIS(ANSI)、UTF-8N、UTF-8が混在していた。

 ※ここではUTF-8NとUTF-8の違い―BOM(byte order mark)については省略させてください

 調べてみるとバッチでそのまま出力するとWindows既定のSJISでファイルは出力されるようだ。

 なるほど、じゃあファイルを全部SJISにすればうまくいくんだな?

 ⇒ 解 決 し て 大 勝 利

ってちょっと待ってください!!!1

調べてると大半の記事が上記みたいな感じで終わってるんですが、今回はUTF-8Nで出力したいんです。。

(プロジェクト的にテキスト系ファイルはUTF-8Nでやらなくちゃいけなかったので。。)

なので今一度UTF-8出力にチャレンジ。

要は文字コード変えておけばいいんでしょう?コマンドで文字コードを変更すればいいとのことなので、バッチ内で「chcp 65001」を実行するように修正して再実行...どうだっ?!

  • だめだった

おかしい。何故かSJISで出力されるファイル。。

もしかしてファイル全部修正しないと結局ダメなの???

このあたりで時間切れになって、最終的に全部手動でファイルをチョメチョメしたというオチで終わりです。
もっとなんとかできていれば成長も出来たのに…

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?