【続】日付け時刻を得る

先日、日付け時刻について、

まあ、date < NUL の2行目を見れば年月日の順序はわかるのでそれで何とかなるかもしれないが、他国語版にも対応するのは大変だろう( date < NUL の実行時だけコードページを英語にするんでしょうね)。

と書いた。
news:alt.msdos.batch.nt とかを最近読み書きしだしたのだが、そこに年月日の順序に依存しない日付け取得スクリプトが載っていた。ただし、date < NUL の2行目に表示順に (mm-dd-yy) 等が表示されることを利用しているが、構文解析めいたことをしない巧妙なやり方でそんなに複雑ではない。ヨーロッパ版Windowsでは (dd-mm-yy) とか表示されるんだろう。もちろん、(yy-mm-dd) でもOKだ。しかし、(年-月-日)だと駄目なのでそのままでは日本語版Windowsでは使えない。
日本語版対応するためには、date コマンド実行前後に、call us と call jp を書くか、スクリプト中の yy mm dd を 年 月 日 に書き換えればいいわけだが、そんなことをするくらいなら、yy mm dd の順序を仮定しているその辺のスクリプトで十分な気もする。
ちゃんと他国語対応するには、date コマンド実行前にコードページ番号を調べて保存し、実行後にコードページをそれに戻すように書く必要があるが、コードページを調べるための chcpmode con cp コマンドの出力形式自体がコードページ依存なので、やはり他国語対応の道は遠そうである。
このスクリプトは曜日付き表示にも対応しており、惜しいのは年の2桁表示に対応していないことだけだけど、それくらいはまあいいか。

ということで、前回書いた、

結論としては、BATスクリプトだけで日付を得るのは特定環境向けなら簡単だが、汎用を求めるなら労多くして益少なしということ。

は98%くらい撤回する。

時刻についても先日は

12時間制と設定されているかもしれない。

と書いたが、コントロールパネルで12時間制に設定しても time < NUL や %TIME% は影響を受けず24時間制のままだった(念のため再起動してみたがOK)のでこれらを使えば問題ない。ただし、time/t だけは12時間制になる。もちろんExplorerの表示やDIRコマンドの表示も12時間制になるが、何故 time/t だけ道連れなのかは謎。

news:alt.msdos.batch.nt では、%~sI のバグについて初めて気づいたがそれはまた別項で。