「wscript.arguments ファイル名」
「wsh argumentsからファイル名取得」
といった検索キーワードをきっかけに、WSH(Windows Script Host)のWshArgumentsコレクションから個々のファイル名を取得するVBScriptをご紹介しました。
同じことを行うJScript版もご紹介しておきます。
ユーザー定義関数を利用してWscript.Argumentsからファイル名を取得するサンプルスクリプト
ユーザー定義関数を利用する場合、以下のようなスクリプトです。
WScript.Echo('ファイルを、ドラッグ&ドロップしてください。');
WScript.Quit();
}
for( var i = 0; i < WScript.Arguments.Count(); i++ ) {
WScript.Echo('フルパス: ' + WScript.Arguments.Item(i));
WScript.Echo('ファイル名: ' + getFileName(WScript.Arguments.Item(i)));
}
WScript.Echo('終了しました。');
function getFileName(file_path) {
var n = file_path.lastIndexOf('\\');
var file_name = file_path.substring(n + 1);
return file_name;
}
考え方はVBScript版と同じです。
ユーザー定義関数・getFileName内の処理は、JavaScriptでは文字列を処理するのが関数ではなく、Stringオブジェクトの各種メソッドなので、VBScript版とはコードの雰囲気が違います。
String.lastIndexOfメソッドがVBScriptのInStrRev関数、String.substringメソッドがVBScriptのMid関数に該当します。
main部分の
if ( WScript.Arguments.Count() === 0 ) {
と、
for( var i = 0; i < WScript.Arguments.Count(); i++ ) {
に登場する「WScript.Arguments.Count()」は、JavaScriptネイティブな方だと「WScript.Arguments.length」とするような気がしますが、「WScript.Arguments」で返されるのは単なる配列ではなく、WshArguments オブジェクトなのでlengthプロパティではなく、あえてCountメソッドを使っています。
lengthプロパティを使うと、「WScript.Arguments」の戻りを配列だと誤解してしまう人がいらっしゃることを懸念しています。
FileSystemObjectを利用してWscript.Argumentsからファイル名を取得するサンプルスクリプト
FileSystemObjectを利用する場合は、以下のようなスクリプトです。
WScript.Echo('ファイルを、ドラッグ&ドロップしてください。');
WScript.Quit();
}
var fso = new ActiveXObject('Scripting.FileSystemObject');
for( var i = 0; i < WScript.Arguments.Count(); i++ ) {
WScript.Echo('フルパス: ' + WScript.Arguments.Item(i));
WScript.Echo('ファイル名: ' + fso.GetFileName(WScript.Arguments.Item(i)));
}
WScript.Echo('終了しました。');
こちらも考え方はVBScript版と同じです。
FileSystemObjectオブジェクトをインスタンス化している、
var fso = new ActiveXObject('Scripting.FileSystemObject');
の部分は、VBA・VBScript系の方には馴染み深いCreateObject関数を使って、
var fso = WScript.CreateObject('Scripting.FileSystemObject');
でもいけますが、new演算子を使うほうがJScriptらしく感じます。
Home » WSH・Windows Script Hostの使い方 » Wscript.Argumentsからファイル名を取得するJScript