Home » WSH・Windows Script Hostの使い方 » Wscript.Argumentsからファイル名を取得するJScript

Wscript.Argumentsからファイル名を取得するJScript

WSH, Windows Script Host, JScript

「wscript.arguments ファイル名」
「wsh argumentsからファイル名取得」
といった検索キーワードをきっかけに、WSH(Windows Script Host)のWshArgumentsコレクションから個々のファイル名を取得するVBScriptをご紹介しました。

同じことを行うJScript版もご紹介しておきます。

[スポンサードリンク]

ユーザー定義関数を利用してWscript.Argumentsからファイル名を取得するサンプルスクリプト

ユーザー定義関数を利用する場合、以下のようなスクリプトです。

if ( WScript.Arguments.Count() === 0 ) {
  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を利用する場合は、以下のようなスクリプトです。

if ( WScript.Arguments.Count() === 0 ) {
  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)));
}

fso = null;
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

「WSH・Windows Script Hostの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.