[WScript]フォルダの中のファイルに一括でコールバック関数を適用

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[WScript]フォルダの中のファイルに一括でコールバック関数を適用

(function(callback) {
    var fso = WScript.CreateObject('Scripting.FileSystemObject');
    for (var args = new Enumerator(WScript.Arguments); !args.atEnd(); args.moveNext())
        for (var files = new Enumerator(fso.GetFolder(args.item()).Files); !files.atEnd(); files.moveNext())
            callback(files.item());
    WScript.Echo('Finish');
})(function(file) {
    var m = file.Name.match(/^(\d)(\d).jpg$/);
    if (m) file.Name = (Number(m[1]) + Number(m[2])) + '.jpg';
});

ちょっとした所用で作ったので公開。

Windows Scripting Hostを使った簡単なサンプルプログラム。ドラッグアンドドロップしたフォルダの中のファイルに適当なコールバック関数を適用するスクリプトです。

正規表現を使ったリネームとかならやってくれるツールも多いけど、算術演算を混ぜたリネームとかは無理。JavaScript使って多少柔軟にいじれるなら楽。

上記のスクリプトは、2桁の数字からなるjpegファイルの名前を、2桁の数字の和にするもの。上記のコードを拡張子.jsにして保存して、対象のフォルダをドラッグアンドドロップしてやれば動く。

コード解説

JScriptを使ったWSHってあまり解説してるサイトがないから、このスクリプトを簡単に解説してみようと思う。

とりあえず、上記のコードを拡張子.jsにして保存して、対象のフォルダをドラッグアンドドロップしてやれば動く。

1行目 (function(callback) {
コールバック関数を引数に取る無名関数を定義開始。
2行目 var fso = WScript.CreateObject('Scripting.FileSystemObject');
WSHでファイルにアクセスするためには、ファイルシステムオブジェクトを使う。WScript.CreateObjectに欲しいオブジェクトの名前を渡すといろいろなオブジェクトを作ってくれる。
3行目 for (var args = new Enumerator(WScript.Arguments); !args.atEnd(); args.moveNext())

D & Dしたフォルダの絶対パスは、WScript.Argumentsコレクションとして渡される。JScriptからコレクションを走査するにはEnumeratorオブジェクトを使う必要があるらしいので、for文の最初で初期化。

このように書けば、複数のフォルダをD & Dしても大丈夫。

4行目 for (var files = new Enumerator(fso.GetFolder(args.item()).Files); !files.atEnd(); files.moveNext())
ファイルシステムオブジェクトのGetFolderオブジェクトに絶対パスを渡すと、該当のフォルダオブジェクトが取得できる。フォルダオブジェクトのFilesプロパティから、その中のファイルのコレクションを取得し、3行目と同様にEnumeratorオブジェクトで走査する。
5行目 callback(files.item());
コールバック関数の適用。ファイルオブジェクトを渡す。
6行目 WScript.Echo('Finish');
WScriptEcho()を使えばメッセージボックスを出力できる。
7-10行目
コールバック関数を定義するところ。ファイルオブジェクトを受け取る。

コレクションの走査にわざわざEnumeratorを使うのが面倒。JScript .NETではfor in構文で走査できるようになったらしいけど。

WSHって、Windows上で簡単にJavaScriptを使えるから便利なんだけど、徐々にWindows Powershellに押されて淘汰されつつある感じ…

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/20-405582a4

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。