(for Internet Explorer)
Set sh = WScript.CreateObject("WScript.Shell")
sh.Run "sub.vbs param1",1,True
Set sh = Nothing
終わるまで待つ(省略するとFALSE)
通常のウィンドウ(省略可能)
呼び出し先が異なるフォルダにあるとき、カレントフォルダは、
呼び出し元のフォルダのままになっているので、呼び出し先で、
次のようにしてカレントフォルダを移動するとよいでしょう。
Set fs = CreateObject("Scripting.FileSystemObject")
Set sh = WScript.CreateObject("WScript.Shell")
oldDir = sh.CurrentDirectory
sh.CurrentDirectory = fs.GetParentFolderName( Wscript.ScriptFullName )
sh.CurrentDirectory = oldDir
Set sh = Nothing
Set fs = Nothing
(主な処理をここに書く)
WScript.Sleep( 1000 )
WScript.Quit
(cscript.exe では、別のコマンドプロンプト・ウィンドウが表示されてしまいます。)
または
WScript.CreateObject("WScript.Shell").Run "sub.vbs param1",,True
RunWithOption  "main.vbs", "/opt1"

Sub  RunWithOption( FName, Opt )
  Dim g_fs : Set  g_fs = CreateObject( "Scripting.FileSystemObject" )
  Dim  cmdline : cmdline = "cmd /K cscript.exe //nologo """+g_fs.GetParentFolderName( _
            WScript.ScriptFullName)+"\" + FName + """ " + Opt
  For i=0 To WScript.Arguments.Count - 1
    If InStr( WScript.Arguments(i), " " ) = 0 Then _
          cmdline=cmdline+" "+WScript.Arguments(i) _
    Else  cmdline=cmdline+" """+WScript.Arguments(i)+""""
  Next
  CreateObject("WScript.Shell").Run  cmdline
  WScript.Quit  0
End Sub
main_opt1.vbs
main.vbs
/opt1
Option Explicit
Set g_fs = CreateObject( "Scripting.FileSystemObject" )
Set f = g_fs.OpenTextFile( "vbslib.vbs" )
Execute f.ReadAll()
f = Empty
(cache)
インクルードしようとするスクリプトにエラーが発生すると、メインでエラーが発生したよう
にエラーが出てしまいます。 エラーメッセージの行番号は 0 固定となります。
<job>
<script language="vbscript" src="lib.vbs"/>
<script language="vbscript">
SubA
</script>
</job>
Sub SubA
  WScript.Echo "SubA"
End Sub
main.wsf
lib.vbs
main.wsf を実行すると、lib.vbs の SubA を呼び出します。
lib.vbs でエラーが発生すると、main.wsf でエラーが発生したようにエラーが出てしまいます。
エラーメッセージの行番号は、lib.vbs の行番号を表していることがあります。
スクリプト内から、インクルードするファイルを指定することはできません。
(XML部分に静的に書く必要があります)
プロシージャの中で Execute すると、グローバル変数ではなくなります。
関数は定義されます。 すでに定義されている関数は上書きされます。
クラスも定義されます。 すでに定義されているクラスがあるとエラーになります。
(クラスは、インスタンスに影響するため上書きできません)
Execute や、script src タグで WSF ファイルをインクルードすることはできません。
Execute で定義した関数は、関数の直下から呼び出すときしか使えません。
他の関数から呼び出すときに使えるようにしたいときは、ExecuteGlobal で定義してください。
JScript では、
(cache)
関連
参考
Windows Script Component(*.wsc) ファイルに記述されたスクリプトは、COM オブジェクトになれます。
COM オブジェクトなので、VBScript や JScript などから呼び出すことができます。
WSC ファイルには、VBScript と JScript を混在させることができます。
WSC ファイルによるCOM オブジェクトのホストは、Scrobj.dll です。
参考
*.wsc ファイルの中では、WScript オブジェクトは、あらかじめ用意されていません。
グローバル変数 g_Name は、GetObject で取得した複数のオブジェクトのそれぞれに、異なる変数領域
を持ちます。
Set g_fs = WScript.CreateObject( "Scripting.FileSystemObject" )
Set obj = GetObject( "Script:"+ g_fs.GetAbsolutePathName( "ClassA.wsc" ) )
obj.MethodByJS   WScript, "ABC"
WScript.Echo  obj.Name
*.wsc を使うサンプル:
<?xml version="1.0"?>
<?component error="true" debug="false"?>
<component>
<public>
  <method name="MethodByJS"><PARAMETER name="Param1"/><PARAMETER name="Param2"/></method>
  <property name="Name" internalName="g_Name"/>
  <property name="Prop2"><get internalName="GetProp2"/><put internalName="PutProp2"/></property>
  <event name="namechanged"/>
</public>
<script language="JScript"><![CDATA[
var  g_Name = "ABC";
function  MethodByJS( Param1, Param2 )
{
  Param1.Echo( "MethodByVBS  "+ Param2 );
}
]]></script>
</component>
*.wsc ファイルのサンプル:
→ wsc_sample.zip
WSC ファイルの中をデバッグするときは、?component debug を true にしてください。
Set g_sh = CreateObject( "WScript.Shell" )
root = g_sh.ExpandEnvironmentStrings( "%windir%\System" )
windir が定義されていないときは、%windir% のままになります
関連
Windows は、定期的に任意のバッチ処理を実行するようにスケジュールすることができます。
指定の日時に一度だけ行ったり、定期的に何度も行ったりできます。
スリープやログオフしていても開始可能です。
実行するユーザがログオンしていないと、ウィンドウは表示されません。(ユーザの切り替えで
裏で動いているときは表示されます)
特定の処理が終わってから、次の処理をすぐに実行するときは、バッチファイルなどで制御します。




バッチファイルなどから実行できることを確認してから、タスクを作成してください。
処理を行うプログラムが、バッチファイルなどから処理を開始できるようになっている必要があります。
別のユーザがログオン中でも正しく動作するには、プログラムの終了まで、実行する必要があります。
できること
設定方法
サンプル
→ TaskScheduler フォルダー (vbslib)
[ コントロール パネル | タスク ] で [ タスクの追加 ] をダブルクリックします。
[ 参照 ] で、処理内容を示す、バッチファイルやスクリプトファイルなどを指定します。
毎日、平日、n日間隔
期間の単位を指定します。 (この次で、時刻や曜日などを指定します)
曜日指定、n週間隔
毎月n日、第n m曜日
時計がついたアイコンが、タスクに追加されます。
アイコンを右クリックし [ プロパティ ] で、さらに詳細を設定できます。
プログラムを実行するユーザを指定します。
特定のユーザでしか処理ができないということでなければ、
普段使っているユーザで構いません。
処理を実行するバッチファイルやスクリプトファイルをあらかじめ作っておきます。
指定した時間になると、ダブルクリックしたときと同じ動きをします。
新規タスク・ウィザードは、次の設定を行います。
処理を実行するバッチファイルなど
実行する間隔(1回だけも可能)
開始時刻
実行するユーザ(通常は、普段使っているユーザでよい)



スリープ状態やバッテリー状態でも実行するときは、「電源の管理」の設定が必要です。
一覧には、ユーザ本人が作成したタスクしか表示されませんが、
ログオフ状態のユーザが作成したタスクも実行されます。
自分でも
パスワードの
入力が必要です
パラメータの指定は、ウィザードでは行えません。[ プロパティ ] で設定してください。
[ タスク ] タブ
[ 設定 ] タブ
Windows7 のタスクが起動する条件(時刻など)になったとき、PC がスリープ状態なら、
スリープから復帰した直後にタスクが起動します。
タスクの [ 条件 | タスクを実行するためにスリープを解除する] にチェック入れてあれば、
30秒前に Sleep 状態から復帰して、タスクが実行できます。
『半スリープ状態への入り方』
スリープ状態のときに、StationTV(地デジ・アプリ) の録画時間の 5分前になると、半スリープ状態に
なります。 予約録画中にスリープに入っても、半スリープ状態になります。
半スリープ状態では、画面は省電力モードになりますが、CPU などは通常通り動きます。
このため、地デジの録画ができます。
StationTV [ 共通設定 | 予約録画終了後処理 ] を [ 待機モード ] にすると、録画が終了したら、
画面が表示された状態での半スリープ状態になります。

『半スリープ状態の特徴』
CPU などは通常通り動きます。
音声出力は、ミュート(無音)になります。
SetSuspendState を呼び出しても、スリープに入りません。
shutdown コマンドによる PowerOff はできます。

『半スリープ状態からの復帰』
半スリープ状態から通常状態に復帰するには、マウスを動かすなどの操作をします。
自動的に復帰させようと、SetCursorPos Win32 API を使ってカーソルを動かしても、復帰しません。
自動的に半スリープ状態から復帰するには、スクリーンセーバーを起動します。 Windows の設定で、
スクリーンセーバーの起動時間を設定してください。 ただし、WSH で任意のプロセスを起動すると、
スクリーンセーバーが起動するまでの時間を測っているタイマーがリセットされるので注意してください。
また、scr ファイルを直接起動した場合は、半スリープ状態から復帰しません。
タスクが起動する条件になったときに、PC がスリープ状態のとき
半スリープ状態では、半スリープ状態のまま、タスクが起動できます。
ただし、Sleep 状態から通常状態に復帰しません。
処理を実行するバッチファイルやスクリプトファイルをあらかじめ作っておきます。
指定した時間になると、ダブルクリックしたときと同じ動きをします。
スタート・メニューから、「タスク・スケジューラ」 を検索して起動します。
右のペインから、「タスクの作成」 を押します。
[ トリガー ] に開始時刻やイベントを入力します。
[ 操作 ] に、実行するコマンドを入力します。
ex.StdIn, ex.StdOut, ex.StdErr
Set g_sh = WScript.CreateObject( "WScript.Shell" )
Set ex = g_sh.Exec( "ipconfig.exe" )  ' ipconfig を実行 *******
Do While ex.Status = 0 : WScript.Sleep 100 : Loop
Do Until ex.StdOut.AtEndOfStream : WScript.Echo ex.StdOut.ReadLine() : Loop
Do Until ex.StdErr.AtEndOfStream : WScript.Echo ex.StdErr.ReadLine() : Loop
ex.ExitCode
ex = Empty
Dim  ex, f
Set g_sh = WScript.CreateObject( "WScript.Shell" )
Set g_fs = WScript.CreateObject( "Scripting.FileSystemObject" )

Set ex = g_sh.Exec( "ipconfig" )
Do While ex.Status = 0 : WScript.Sleep 100 : Loop

Set f = g_fs.OpenTextFile( "C:\result.txt", 8, True, False )  '// 8=append
Do Until ex.StdOut.AtEndOfStream : f.WriteLine ex.StdOut.ReadLine() : Loop
Do Until ex.StdErr.AtEndOfStream : f.WriteLine ex.StdErr.ReadLine() : Loop

ex = Empty
f = Empty
ex.Status   ' 0=実行中, 1=終了
ex.ExitCode ' 終了コード(返り値)
WScript.StdErr.Write "pass" & vbCR & vbLF
ファイルに追記出力する
Set g_sh = WScript.CreateObject( "WScript.Shell" )
Set ex = g_sh.Exec( "ipconfig.exe" )  ' ipconfig を実行 *******
Do While ex.Status = 0 : WScript.Sleep 100 : Loop
text = ex.StdOut.ReadAll()
ex = Empty
Set g_fs = WScript.CreateObject( "Scripting.FileSystemObject" )
Set f = g_fs.GetFile( "c:\a.txt" )
f.Name = "b.ini"
Set g_fs = WScript.CreateObject( "Scripting.FileSystemObject" )
s = g_fs.GetParentFolderName( "c:\sub1\sub2\file.txt" )  ' s="c:\sub1\sub2"
s = g_fs.GetFileName( "c:\sub1\file.txt" )  ' s="file.txt"
s = g_fs.GetDriveName( "c:\sub1\file.txt" )  ' s="c:"
s = g_fs.GetBaseName( "c:\sub1\file.txt" )  ' s="file"
s = g_fs.GetExtensionName( "c:\sub1\file.txt" )  ' s="txt"
s = g_fs.BuildPath( "c:\sub1", "file.txt" )  ' s="c:\sub1\file.txt"
C:\a.txt をb.ini に変えています。
カレントフォルダを基準に、相対パスをフル・パスにします。
実際にファイルが存在しなくても正しく操作されます。
フル・パス = g_fs.GetAbsolutePathName( 相対パス )
g_fs.GetAbsolutePathName( フル・パス + "\.." ) とすると、親フォルダの
フル・パスになります。
g_fs.GetAbsolutePathName( "C:\folder\..\a.txt" ) は、"C:\folder\..\a.txt"
のままです。
g_fs.GetAbsolutePathName( "C:\folder\*" ) は、"C:\folder\." になります。
存在するファイルの名前を変えます。
s = g_fs.GetParentFolderName( s ) + "\" + g_fs.GetBaseName( s ) + ".csv"
Set g_fs = WScript.CreateObject( "Scripting.FileSystemObject" )
Set f = g_fs.GetFolder( "c:\folderA" )
f.Name = "folder1"
C:\folderA をfolder1 に変えています。
存在するフォルダの名前を変えます。
変えようとする名前のファイルが既にあるときは、エラーになります。
C:\Users\user1\Documents\sample.txt
ファイルやフォルダの場所を示すアドレスのことを特に、「パス」と言います。
C:\Users\user1\Documents\sample.txt
例:
上記は、Windows 7 における、「ドキュメント」フォルダにある sample.txt ファイルの
フル・パスです。 C:\ から始まるものを
フォルダ(エクスプローラー)の「アドレス」に書かれています。
\ または / は、Windows におけるフォルダーの区切りを示します。
C: は、コンピューターの C ドライブを表しており、通常、PC に入っている
ハードディスクになります。 USB メモリを挿すと、E ドライブなどができます。
一般にスクリプトには、
相対パスは、
カレントフォルダー
相対パス
フル・パス
C:\Folder1
C:\Folder1\File1.txt
File1.txt
C:\Folder1
sub\File1.txt
C:\Folder1\sub\File1.txt
C:\Folder1\File1.txt
.\File1.txt
C:\Folder1
..\File1.txt
C:\File1.txt
C:\Folder1
環境変数を含むパスは、
または、
で展開できます。
C:\File1.txt
..\..\File1.txt
C:\Folder1\sub
は、通常、起動したスクリプト・ファイル(.vbs)があるフォルダーになります。
キーワード:
インターネットにあるファイルの場所を示すアドレスは、URL または URI と言います。
と言います。
フル・パス
か、環境変数を含んだパスを記述します。
相対パス
を基準としたパスです。 カレントフォルダーは、
カレント・フォルダー
で、設定や参照ができますが、スクリプト起動直後
相対パスに記述する . (ピリオド)は、カレントフォルダー、 .. (ピリオド2つ)は、
親フォルダーを表します。
URL は、ファイル操作などの関数に指定することはできません。
LAN (家庭内、社内ネットワーク)にあるファイル(\\ で始まるアドレス、UNC)は、
copy 関数などに指定できます。 ただし、カレント・フォルダー(後述)に指定する
ことはできません。
などを使ってダウンロードしてください。
例:
http://www.sage-p.com/vbslib/vbslib.htm
参考
→ UNC:Universal Naming Convention
参考
ファイルをコピーします
ファイルを移動します
フォルダを移動します
フォルダが存在するかどうかを返します
ファイルを削除します
フォルダをコピーします
ファイルが存在するかどうかを返します
Set g_fs = CreateObject("Scripting.FileSystemObject")
オブジェクトの取得
メンバ
フォルダを作成します。
WSH だけでなく VBA でも使えます。
関連
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile  "ipLibCom.h", "..\..\..\inc\ipLibCom.h", True
Set fs = Nothing
強制上書き
新しくできるファイル名も含める
src から dst にファイルをコピーします。
Sub  FileSystemObject::CopyFile( src as string, dst as string [, overwrite as Bool] )
【引数】
src
コピーするファイルのパス(コピー元、ワイルドカード可)
dst
コピー先のファイルのパス
サンプル
overwrite
上書きするかどうか。 デフォルト True (*1)
False のとき、上書きしようとするとエラーになります。
(*1)
参考
エラー
src に指定したファイルが無いとき、エラー 76