Windows で cal コマンドを使ってカレンダー一覧を作る
テキストのカレンダー一覧が欲しかったのでつくることにした。Windows には cal コマンドがないので何とかして入手し、これを何度も呼び出すようなバッチファイルを書くことで実現。
- 前提
- 1: Gcal の入手
- 2: Gcal を試しに実行してみる
- 3: カレンダー一覧をつくる
- (余談1) cal コマンドで Gcal を呼び出せるようにする
- (余談2) カレンダーのスペル
- (余談3) カレンダーへのアクセス
- 参考
前提
- Windows7 32bit
1: Gcal の入手
cal コマンドの代替として GnuWin32 の Gcal を使う。
上記はタイトルが「GnuWin」となっているが、ダウンロードするのは Gcal に必要な部分のみである。ちなみにインストーラーなので普通に実行してインストールする。
(参考) インストール後のファイル構成
Gcal に必要なファイルのみが整っている。
$ dir /b "C:\Program Files\GnuWin32\bin" gcal-daily gcal-daily.orig gcal-ddiff gcal-ddiff.orig gcal-ddiffdrv gcal-ddiffdrv.orig gcal-dst gcal-dst.orig gcal-gcalltx gcal-gcalltx.orig gcal-gcalltx.pl gcal-gcalltx.pl.orig gcal-moon gcal-moon.orig gcal-mrms gcal-mrms.orig gcal-srss gcal-srss.orig gcal-wlocdrv gcal-wlocdrv.orig gcal.exe gcal2txt.exe libiconv2.dll libintl3.dll rxspencer.dll tcal.exe txt2gcal.exe
2: Gcal を試しに実行してみる
年と月を指定してみた。
$ "C:\Program Files\GnuWin32\bin\gcal.exe" 01 2019 January 2019 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
年だけ指定してみた(このオプションは続く一覧作成時に使う)。
$ "C:\Program Files\GnuWin32\bin\gcal.exe" 2004 2004 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 4 5 6 7 8 9 10 8 9 10 11 12 13 14 7 8 9 10 11 12 13 11 12 13 14 15 16 17 15 16 17 18 19 20 21 14 15 16 17 18 19 20 18 19 20 21 22 23 24 22 23 24 25 26 27 28 21 22 23 24 25 26 27 25 26 27 28 29 30 31 29 28 29 30 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 1 2 3 4 5 4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12 11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19 18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26 25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30 30 31 July August September Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11 11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18 18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25 25 26 27 28 29 30 31 29 30 31 26 27 28 29 30 October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 31
3: カレンダー一覧をつくる
Gcal が動くことがわかったので、カレンダー一覧をつくる。
まともにコマンドラインオプションを読み解くと骨が折れる ので手抜きすることに。前記にて、年数だけ与えると「その年の月表示を 3 列 4 行で並べて表示する」ことことがわかっているので、この出力を並べることにした。バッチファイルを使う。
output.bat
@echo off setlocal set calcmd="C:\Program Files\GnuWin32\bin\gcal.exe" set calstart=1970 set calend=2100 set name_merged=all_%calstart%_%calend%.txt echo.> %name_merged% for /L %%i in (%calstart%,1,%calend%) do ( echo %%i... %calcmd% %%i > %%i.txt type %%i.txt >> %name_merged% )
これを実行すると、以下のようにファイルがつくられる。
$ dir /b ... 2019/06/27 19:12 2,428 1970.txt 2019/06/27 19:12 2,428 1971.txt ... 2019/06/27 19:12 2,428 2100.txt 2019/06/27 19:12 318,070 all_1970_2100.txt 2019/06/27 19:12 299 output.bat
all_1970_2100.txt は 1970.txt、1971.txt、……の内容を一ファイルでずらりと並んだもの。
とりあえず最低限カレンダー一覧をゲットできたので良しとする。
(余談1) cal コマンドで Gcal を呼び出せるようにする
以下のバッチファイルを PATH の通ったフォルダに置く。
cal.bat
@echo off "C:\Program Files\GnuWin32\bin\gcal.exe" %*
(余談2) カレンダーのスペル
- calendar
- calender
突然ですが正しいのはどっちでしょう。
……前者、calendar が正解です。dar なんですね(最近まで普通に間違ってた)。
(余談3) カレンダーへのアクセス
今回つくったカレンダーにどうやってアクセスするか。私は以下のようにした。
- github\stakiran\text\calendar に 1970.txt, 1971, ... 2100.txt を配置
- 愛用している fenrir を再スキャン
これで fenrir から 2019 と打つだけで 2019 年のカレンダーにアクセスできる。fenrir は AutoHotkey にて Alt + 1 で起動できるようにしているので、実際は Alt + 1 → 2019 の二段階でアクセス可。かなり素早くカレンダーを開けるようになった。
Q: 「普通に余談 1 を整備してからコマンドプロンプトで cal 2019 と叩けばいいのでは?」
ダメ。コマンドプロンプト上の表示は見づらい。愛用のテキストエディタで見れることが重要なのである。