「武器を身につけよう」へ戻る

1.別のFileのVBScriptを実行する。

考え方としてはFSO(FileSystemObject)を使ってScriptをテキストファイルとして取り出し、DoVBScript、DoJScript、DoTclScriptを使って実現します。
早速別ファイルのVBScriptを実行するスクリプト作成に取り掛かりましょう。
FSO(FiIeSyastemObject)を使う時に最初にしなければいけないのはオブジェクト(インスタンス)を作ることです。

Topへ
'変数を用意
dim fso
'変数にオブジェクトを代入(正確な表現ではありませんが)
Set fso=CreateObject("Scripting.FileSystemObject")

これでFSOオブジェクトが作成されました。
普通この作業をインスタンス(実体)を作成するといいます。(ちゃんと覚えたい方は調べてください。)
オブジェクト(インスタンス)を変数に確保する時は普通の代入とは違いSetというものを使います。

さて、fileに何かをしたくてもどのファイルか指定しないといけませんのでPathを変数に入れておきます。
cの直下に"test.vbs"という実行したいスクリプトファイルがあると仮定して次のようにパスを用意します。
dim strPath
strPath="C:\test.vbs"
Topへ

FSOもオブジェクトなのでShadeと同じようにメソッドやプロパティーがあります。(Shadeのメソッドやプロパティー覚えてますか?)
その中のOpenTextFileというメソッドを使います。
このメソッドはその名の通り、テキストファイルを開いてその情報を操作する為の別のTextStreamオブジェクトを返してきます。

帰って来るオブジェクトを受け取る変数を宣言して下のようにtextStreamオブジェクトを確保します。

dim objStream
Set objStream=fso.OpenTextFile(strPath,1,False)

ちなみにメソッドはShadeのメソッドと同じように引数が必要な時があります。OpenTextFileメソッドでは必要です。
一番目は 開きたいファイルのパス。(先ほど用意しておきましたよね。)
二番目は 1が読み込み専用 2が書き込み専用 8が追加書き込みです。(ここでは読み込みたいだけなので1)
三番目は 開こうとしたファイルがなかった時(パスを間違えた時やファイルが消去されていたりしたときなど)にどうするかを指定します。
・・・・・trueの時は新しくファイルを作ってしまいます。falseの時は作りません。(ここでは作る必要は無いのでFalse)
四番目もあります(省略可能)がここでは触れません。知りたい方はマニュアルを見てください。

さて次はこのTextStreamオブジェクト(objStream)のReadAllメソッドを使って実際にデータを取り出します。
ここではstrScriptという変数を用意して、fileの中身(文字列)を全てその変数に代入します。

dim strScript
strScript=objStream.ReadAll()

ReadAllメソッドは先ほど指定したファイルのテキストの全てを取り出して文字列にして返してくれるメソッドです。
これは特に引数はありません

取り出したらFileを閉じておきましょう

Topへ
objStream.close()

これでShadeのDoVBScript等使うスクリプト全体の文字列を準備できました。
DoVBScriptを使って実行しましょう。

XShade.DoVBScript strScript

几帳面な人はこの後余分なメモリを使うインスタンスを開放してあげます。

Set fso=nothing
Set objStream=nothing

すぐ終わる短いスクリプトなら無くてもほとんど影響ありません。スクリプトが終われば開放されます。

これでfileのスクリプトを実行できるようになります。
あちこちで変数を宣言しているのでまとめます。

dim fso,strPath,objStream,strScript
strPath="C:\test.vbs"
Set fso=CreateObject("Scripting.FileSystemObject")
Set objStream=fso.OpenTextFile(strPath,1,False)
strScript=objStream.ReadAll()
objStream.close()
XShade.DoVBScript strScript
しか−し、もし他の人がこのスクリプトを使うことを考えるとちょっと怖いです。
もしパスが間違っていたら、もしファイルが知らぬ間に消されていたら
拡張子の違うfileを開いてしまったら
突然エラーダイアログが現れます。

実用的に考えるならばfileがあるかどうかもチェックしたいですね。
拡張子の種類もチェックしたいですね。
自分だけが使って自分だけがわかればいいスクリプトならいいのだけれど。
ちなみにファイルチェックの例としてFSOのFileExistsメソッドを使った例をあげます。

'---ファイルチェック
function FileCheck(FilePath)
'  引数 ファイルpath(文字列)
'  戻り値 Bool(ない時にfalse)
  dim fso
  set fso=CreateObject("Scripting.FileSystemObject")
  if fso.FileExists(FilePath) then
   FileCheck=true
  else
   FileCheck=false
  end if
  set fso=nothing
end function

拡張子についてはInStr等を使えばできます。

「武器を身につけよう」へ戻る Topへ