電子書籍作成でpandocを使うにあたり、コンバーターを書く必要があり、少しbatファイルをかきました。覚書程度にめもを残しておきます。
目次
VsCodeとBat(バッチファイル)
VsCode上でバッチファイルを実行
VScodeのくそアプデがっ!
— GesonAnko(Yasuhiro Shimomura) (@GesonAnko) September 4, 2021
なんでコマンドプロンプトからパワーシェルに変えるんだよ。activate.bat実行できなくなったじゃねえか
たしかにちょっと面倒だったのですよね。右クリックで簡単に実行できるものを見つけました。
VsCode上でバッチファイルの文字化け
エクスプローラー上からbatをたたくと文字化けしないのですけど、VsCodeからbatを実行するとコメントなどが文字化けする症状がありました。
Windowsのコマンドプロンプトやターミナルが標準でShift-JIS(またはCP932)を使用している点が問題になっているようです。UFT8からShift-JISのbomなしにしたらなおりました。なくても平気っぽかったですが、明示的に次のコードも追加しました。
@echo off
@chcp 932 > nul
@
:- バッチファイル内でのコマンドの前に
@
を付けることで、そのコマンドが実行される際にコマンド自体がコンソールに表示されなくなります。これは、バッチファイルの実行時の出力をクリーンに保つためのものです。
- バッチファイル内でのコマンドの前に
chcp
:chcp
は “change code page” の略で、コマンドプロンプトの現在の文字コード(コードページ)を表示または変更するコマンドです。
932
:932
はShift-JISのコードページ番号です。Windowsの日本語環境では、標準的にこのコードページが使用されます。
>
:- この記号はリダイレクトを意味します。コマンドの出力をファイルに保存する場合や、あるいは出力を別のコマンドの入力として使用する場合などに使います。
nul
:nul
はWindowsの”null device”を指します。これは、出力を破棄するための特別な”デバイス”です。つまり、> nul
とすることで、コマンドの出力を完全に破棄することができます。
VSCode読み込み時にshift-jisが文字化けする
batファイルをshift-jisにするとVsCode起動時に文字化けする問題がありました。毎回、修正するのは面倒ですので、settings.jsonに次の設定を追加しました。
{
"[bat]": {
"files.encoding": "shiftjis"
}
}
ファイル名の取得
よくわからなくなったら、次のコードを動かすとよくわかります。
@echo off
for /r %%i in (*.md) do (
echo %%i
echo %%~di
echo %%~pi
echo %%~ni
echo %%~dpni
)
pause
ファイル名だけなら、echo %%~niがよさそうです。
/rはサブディレクトリまで検索します。
for文で文字列を連結!変数の遅延展開
癖があります。
@echo off
setlocal enabledelayedexpansion
set items=
for /r %%i in (*.md) do (
echo converting %%i
echo converting filename %%~ni.md
set item= %%~ni.md
set items=!items! !item!
)
echo !items!
endlocal
pause
遅延環境変数の理解が必要そうです。
配列も配列もどきのようで癖があります。
cd /d %~dp0
cd /d %~dp0
cd
: “change directory” の略で、現在のディレクトリ(作業ディレクトリ)を変更するコマンドです。/d
: このオプションは、ディレクトリの変更時にドライブも切り替えることを指示します(つまり、異なるドライブへの移動を許可します)
%~dp0
はバッチファイル内で特に役立つ変数のモディファイアです。
%0
: バッチファイル自体を指します。~
: これは次のモディファイアに適用するための接頭辞です。d
: ドライブレターを取得します。p
: パスを取得します。
したがって、%~dp0
はバッチファイルが存在するドライブおよびディレクトリのフルパスを返します。
例: もしバッチファイルが C:\folder\subfolder\script.bat
にある場合、 %~dp0
は C:\folder\subfolder\
を返します。
この特性は、バッチファイルがあるディレクトリに関連する操作を行う場合に非常に便利です。
スラッシュとバックスラッシュ
Windowsのコマンドプロンプトやバッチファイルでは、ディレクトリのパスの区切り文字としてバックスラッシュ (\
) が一般的です。一方、HTMLやURLではスラッシュ (/
) が使用されます。
バッチファイル(batfile)
Windows 3.1やWindows 95からの古い技術。現在では powershell がメインとなりつつある。
拡張子は.batや.cmdなどが多く使われます。
Macはシェルスクリプト。拡張子は.shや.bash
Windowsでシェルスクリプトは動かすことはあれこれいるからバッチファイルに変換するといいかも。
Bash to Bat Converter
DOSbatをbashに変換する早見表です。
実行時にREMを表示しない
REM 表示される
@echo off
REM 表示されない
echo 表示される
pandocの電子書籍のフォルダ構成
-markdown(作業用フォルダ)
-html
-epub
-theme
--css
--js
--images
--font
--video
--svg(アイコン素材)
ePUBは1つのファイルなのであまり問題ありません。htmlのリンク問題があってこのような構成になりました。
pandoc
の動作に関して、--template
オプションと-c
オプションは少し異なる挙動を示します。
--template
: このオプションで指定するテンプレートファイルのパスは、バッチファイルを実行するディレクトリ(つまり、バッチファイルがある場所)からの相対パスまたは絶対パスとして解釈されます。そのため、--template=theme\template.html
と--template=.\theme\template.html
は実質的に同じ動作となります。-c
(CSSオプション): このオプションで指定するCSSファイルのパスは、生成されるHTMLファイルからの相対パスとして解釈されます。そのため、出力HTMLがhtml
ディレクトリ内にある場合、..\theme\css\base.css
のように1階層上に移動してから目的のCSSファイルを参照するように指定する必要があります。
コメント