Linuxコマンドを使って日付ファイルを作成する。
成果物
HidemaruFiler.MakeNowFile
HidemaruFiler.MakeNowDirectory
ついでにディレクトリ版も作った。
対象環境
- Windows XP Pro SP3 32bit
- cmd.exe
- ConEmu
- 秀丸ファイラ 1.10
前回まで
秀丸ファイラで日付ファイルを一発作成したい。PowerShellは動作が遅かった。
Linuxコマンドではインラインができずに悩み、諦めた。
今回
shスクリプトファイルで作成した。
実行速度 | 実装 |
---|---|
10~20秒 | 秀丸ファイラで一発ファイル作成(PowerShellインライン版) |
1~2秒 | 今回 |
速くなったというか、PowerShellが特別に遅すぎるだけ。今回のでさえラグを感じる。
ソースコード
mknfile.sh
# $1 /some/path/string/ # $2 py rb mb ... dir=`echo "$1" | tr '\\' '/'` file=`date "+%Y%m%d%H%M%S%3N.$2"` touch $dir$file
たったこれだけ。
CallByHidemaru.bat
:: %1 %dir% 秀丸ブックマーク機能の%V(末尾に\なし) :: %2 %ext% 任意のファイル拡張子(py,rb,mb,...) @echo off set dir=%1 set ext=%2 if not "%dir:~-1%"=="/" (set dir=%dir%/) bash mknfile.sh "%dir%" "%ext%" @echo on
秀丸ファイラはディレクトリの末尾に\
を付与しない。それが一般的かどうかは知らないが、末尾に\
を付与して渡すことにした。
秀丸ファイラのブックマーク/ツール項目に、以下のコマンドを登録する。
C:\CallByHidemaru.bat %V py
あとは任意のキーに割り当てて実行すれば、20160102030405678.py
のようなファイルが生成される。
もし秀丸ファイラの%V, %dのどちらかが、/
区切記号でパスを渡してくれていたら、以下のコマンドをブックマーク/ツール項目に登録するだけで済んだかもしれない。
C:\MinGW\msys\1.0\bin\bash.exe -c "fname=`date \"+%Y%m%d%H%M%S%3N.py\"`; touch \"%V/$fname\""
課題
コマンドプロンプトが一瞬だけ表示されてウザい。
おそらくWSH/JScriptで以下のように実装すると非表示で起動できると思う。
test.js
var dir = WScript.Arguments(0); var shell = WScript.CreateObject("WScript.Shell") shell.Run("<コマンド>", 0); shell = null;
ポイントはWScript.Shell.Run関数の第二引数。0~10の値でウインドウの状態を指定できるらしい。0なら非表示。
以下のような秀丸ファイラのブックマーク/ツール項目を作成して実行する。
cscript.exe test.js %V
でも、これはやらない。
やらない理由
すでに「cmd→bash→dateコマンド」となっており面倒くさい。これが「WSH(JScript)→cmd→bash→dateコマンド」のようになってしまう。異なる文脈間での連携が必要になると、それだけ無駄な苦労を強いられるかもしれない。すでにパス区切記号など連携において支障をきたし、スクリプトファイル化するという無駄な苦労が生じた実績がある。
かといって、秀丸ファイラのツール項目でJScript呼出機能js:<JScriptファイルパス>
を使えば、ファイル作成をJScriptで書く羽目になる。これ以上、糞言語に悩まされたくない。
よって、よほど黒窓がウザいと感じない限り、妥協することにする。
所感
日付ファイル作成なんて速攻で終わると思ったのに、調べると奥が深くて苦労した。