2012年10月24日水曜日

YYYYMMDDでファイルをリネームするためのJS

オフィスのファイル名ルールではよくあるこれ。

「上半期実績と見通し20121024.xlsx」

みたいなやつ。バージョン管理システムがあればそれでもいいのだけれど、両方開いたりすることを考えるとやっぱり別ファイル名がいい。特にエクセルは、ディレクトリが別でも同じファイル名は開くことができないので、ファイル名は別にしておく必要がある。

そしてこのYYYYMMDDのファイル名を作る方法あれこれ。

1.ATOKを使う


ATOKは賢くて、「きょう」を変換すると「2012/10/24(水)」みたいな候補も出してくれる。そして日付の書式のオプションで、YYYYMMDDの形式も選ぶことができる。ちなみに、あした提出の書類なら「あした」で検索しても、あしたの日付で変換してくれる。「げつよう」とか「かよう」でも、変換してくれるのが兆賢い。

ただし、ATOKは有料。これだけのために全社でATOKを買おうというのは、説得力が薄い。

2.そういうJSを書く

JSでWSHを書いて、そのJSを、「送る」フォルダに入れる。


スクリプトはこれ。

if(WScript.Arguments.length == 0){
        WScript.Echo("ファイルをドロップしてください");
        WScript.Quit();
}
var source = WScript.Arguments(0);
if(!source.match(/(.*\\)(.+?)\.(.*?)$/)){
        WScript.Echo("ファイルをドロップしてください");
        WScript.Quit();
}
var dir      = RegExp.$1;
var basename = RegExp.$2;
var ext      = RegExp.$3;
//今日の日付を作成
var d = new Date();
var strDate = d.getFullYear();
strDate +=  ("0" + (d.getMonth() + 1)).slice(-2) ;
strDate +=  ("0" + d.getDate()).slice(-2) ;
//WScript.Echo(strDate);
//もしbasenameに数字8桁があれば、そこを置換
if(basename.match(/\d{8}/)){
        //WScript.Echo(basename);
        basename = basename.replace(/\d{8}/,strDate);
}else{
        basename += strDate;
}
//WScript.Echo(basename);
var newname = dir + basename + "." + ext;
var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.GetFile(source).Copy(newname);
WScript.Echo(newname);
これを、yyyymmdd.js みたいな名前で保存して、送るフォルダに保存すればいい。

送るフォルダを一発で開くには、ファイル名を指定して実行で「shell:sendto」を入れればいい。

これで、ちょっと大人になった気分。

「Book1.xlsx」でファイルを送ってくる人よりも「収益シミュレーション20121024.xlsx」でファイルを作る人の方が信頼される。

0 件のコメント:

コメントを投稿