[WScript]フォルダの中のファイルに一括でコールバック関数を適用
- 2007-07-06
- カテゴリ: その他のプログラミング
- タグ: JavaScript WScript Tips
(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

