(for Internet Explorer)
← ▼ ▲
↑
定数のコメント
'***********************************************************************
'* Constants: SampleConstants
'* SampleConstants
'*
'* : SymbolA - 0
'* : SymbolB - 1
'***********************************************************************
Const SymbolA = 0
Const SymbolB = 1
<< Natural Docs
← ▼ ▲
変数のコメント
<< Natural Docs
'***********************************************************************
'* Variable: g_GlobalVariable
'***********************************************************************
Dim g_GlobalVariable
Set g_GlobalVariable = new SampleClass
← ▼ ▲
VBSReference(Web)
VBSReference1
VBSReference2
Lesson1 もっとも簡単なプログラムを書いてみよう
Lesson2 プロパティ・メソッド・オブジェクトの意味を理解しよう
Lesson3 If文と式の評価について
Lesson4 For文と配列について
Lesson5 その他のフロー制御構文
Lesson6 サブルーチン-SubプロシージャとFunctionプロシージャ-
Lesson7 エラー処理の基礎
Lesson8 基礎編のまとめ
Lesson9 アプリの起動とレジストリ
WScriptのオブジェクト1 -WshShellオブジェクト-
Lesson10 ショートカットの作成
WshShellのオブジェクト1 -WshShortcutオブジェクト・WshUrlShortcutオブジェクト-
Lesson11 環境変数と特殊フォルダ
WshShellのオブジェクト2 -WshEnvironmentオブジェクト・WshSpecialFoldersオブジェクト-
Lesson12 ネットワークとコマンドラインオプション
WScriptのオブジェクト2 -WshNetworkオブジェクト・WshArgumentsオブジェクト-
Lesson13 ファイルシステムにアクセスする
FileSystemObjectのメソッド -FileSystemObjectオブジェクト-
Lesson14 ファイル・フォルダ・ドライブの操作
FileSystemObjectのオブジェクト1 -Folder,File,Driveオブジェクト・Folders,Files,Drivesコレクション-
Lesson15 テキストファイルを読み書きする
FileSystemObjectのオブジェクト2 -TextStreamオブジェクト-
Lesson15
← ▼ ▲
WScript オブジェクト
→ WScript.Shell オブジェクト
→ WScript オブジェクト
→ ＠IT：Windows TIPS -- Tips：WSHでログオン時に共有フォルダを設定する (Web)
WScript.Network オブジェクト
← ▼ ▲
WScript オブジェクト
WScript.Echo [Arg1] [,Arg2] [,Arg3]
WScript::Echo
→ WScript.Echo の見た目
WScript::Sleep
WScript.Sleep( msec )
WScript::Quit
WScript.Quit( quit_code=0 )
WScript::ScriptFullName
WScript.ScriptFullName
起動した VBScript ファイルのフル・パス。
include された VBScript ファイルでは、include した大元のファイルのパス。
(Web)
WScript.Echo
WScript.ScriptName
(Web)
WScript::ScriptName
VBS ファイル名＋拡張子。 フォルダパスは含まれません。
下記のように、オブジェクト名を記述する必要があります。
グローバル以外のオブジェクトの Class_Terminate は呼ばれません。
vbslib では、Raise を使うことを推奨します。 vbslib を使わないときは、
Err.Raise に指定したエラー番号が、プロセスの返り値（エラーレベル）に
反映されませんが、vbslib を使うと反映されます。（参照：CallFinalizeInModules）
サンプル：
Stop : WScript.Quit 1
Quit する前にデバッガーで止まるようにするとよいでしょう。
(Web)
WScript::StdIn
TextStream
実行中のスクリプトの標準入力。 wscript から実行した時は存在しない。
のメソッドが使える。
(Web)
標準入力に何もないときに、WScript.StdIn.AtEndOfLine を呼び出すと、
標準入力に何か入るまで待ち続けます。
入力があるかどうかを確認する N88BASIC の INKEY に相当することはできません。
← ▼ ▲
WScript.Shell オブジェクト (WshShell オブジェクト)
→ CurrentDirectory
Dim g_sh : Set g_sh = WScript.CreateObject("WScript.Shell")
オブジェクトの取得
(Web)
→ SpecialFolders
→ Run
→ Exec
→ RegRead
← ▼ ▲
CurrentDirectory (Shell)
Set g_sh = WScript.CreateObject("WScript.Shell")
oldDir = g_sh.CurrentDirectory
g_sh.CurrentDirectory = ".."
:
g_sh.CurrentDirectory = oldDir
カレントディレクトリ・プロパティ
Property Shell::CurrentDirectory as String
[ 親: WScript.Shell オブジェクト ]
サンプル： 一度、親フォルダのフル・パスに設定し、戻す
カレントディレクトリにしようとするフォルダが存在しないときは、
エラー 0x80070002 が返ります。
Set g_sh = WScript.CreateObject("WScript.Shell")
g_sh.CurrentDirectory = g_fs.GetParentFolderName( Wscript.ScriptFullName )
サンプル： 現在の .vbs ファイルが入っているフォルダをカレントにする
プログラムの最初でこれをしないと、プログラム中の相対パスの基準は、コマンド
プロンプトのカレントディレクトリや、スクリプトを起動したプログラムのカレント
ディレクトリになります。
include される .vbs ファイルは、上記のようにしても、カレントディレクトリは
.vbs ファイルが入っているフォルダにはなりません。
include するスクリプトが include する前にカレントディレクトリを設定してください。
(Web)
← ▼ ▲
ExpandEnvironmentStrings (Shell)
Function Shell::ExpandEnvironmentStrings( s as string ) as string
環境変数を展開します。
サンプル：
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
WScript.Echo g_sh.ExpandEnvironmentStrings( "%ProgramFiles%\MyProg" )
C:\Progarm Files\MyProg と出力されます。
指定した環境変数が定義されていないときは、% % で囲んだ部分もそのまま残ります。
エラーにはなりません。
g_sh.ExpandEnvironmentStrings( "%Unknown%\MyProg" ) = "%Unknown%\MyProg"
関連
→ WshShell::Environment プロパティ (Web)
[ 親: WScript.Shell オブジェクト ]
→ 環境変数を参照する (Excel)
→ env (vbslib)
← ▼ ▲
Environment (Shell)
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim envs : Set envs = g_sh.Environment( "Process" )
WScript.Echo "PATH = " + envs.Item( "PATH" )
envs.Item( "TEMP2" ) = "temporary2"
WScript.Echo "TEMP2 = " + envs.Item( "TEMP2" ) '// "TEMP2 = temporary2" と表示
サンプル：
Function Shell::Environment( Place as string ) as WshEnvironment
環境変数のコレクションを返します。 コレクションから環境変数の設定もできます。
【引数】
Place
環境変数の存在場所。 通常 "Process"
返り値
Place 引数
→ ＠IT：Windows TIPS -- Tips：WSHで環境変数を設定する (Web)
参考
(Web)
[ 親: WScript.Shell オブジェクト ]
"Process", "System", "User", "Volatile" のいずれか
"Process" を指定すると、現在の WSH プロセスが持っている環境変数になります。
プロセス起動時の値は、 System と User を合わせたものです。
"System", "User" を指定した場合は、PC の設定を変えることになるので、取り扱いに
注意してください。 "User" は、Windows7 でも管理者権限である必要はありません。
環境変数のコレクション
→ WshEnvironment オブジェクト
For Each line In g_sh.Environment( "Process" )
WScript.Echo line
Next
サンプル：
← ▼ ▲
SpecialFolders (Shell)
特殊フォルダのパスを返します
Shell::SpecialFolders( name as string ) as string
”AllUsersDesktop”
(Web)
name に指定できる値
→ 特殊フォルダ
関連
→ Shell::NameSpace
[ 親: WScript.Shell オブジェクト ]
Set g_sh = WScript.CreateObject( "WScript.Shell" )
MsgBox g_sh.SpecialFolders( "Desktop" )
サンプル：
C:\Documents and Settings\(ユーザ名)\デスクトップ
出力例：
”NetHood”
”SendTo”
”StartMenu”
”Startup”
”Templates”
”Recent”
”Programs”
”PrintHood”
”MyDocuments”
”Fonts”
”Favorites”
”Desktop”
”AllUsersStartup”
”AllUsersPrograms”
”AllUsersStartMenu”
→ 送る、に登録する
← ▼ ▲
送る、に登録する
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim shcut : Set shcut = g_sh.CreateShortcut( g_sh.SpecialFolders( "SendTo" ) +_
"\file1.lnk" )
shcut.TargetPath = "C:\file1.txt"
shcut.Save
エクスプローラーの右クリック [ 送る ] に file1 を登録します。
CreateShortcut
SpecialFolders
file1.lnk
C:\file1.txt
送る、に登録する場合は、パラメーター %1 は不要です。
← ▼ ▲
Run (Shell)
(Web)
Function Shell::Run( PathAndParam as string,
[ WindowStyle as integer], [ WaitOnReturn as boolean ] ) as integer
PathAndParam に指定したコマンドラインに従って、プロセスを起動します。
【引数】
PathAndParam
起動する実行ファイルのパスと、パラメータ
WindowStyle
ウィンドウスタイル。デフォルト＝1、最小化=7
WaitOnReturn
終了するまで待つかどうか。デフォルト＝False
返り値
エラーレベル。 待たないときは常に 0
→ メモ帳を起動する（.exe プログラムの起動）
[ 親: WScript.Shell オブジェクト ]
Set g_sh = WScript.CreateObject( "WScript.Shell" )
Set g_fs = WScript.CreateObject( "Scripting.FileSystemObject" )
g_sh.CurrentDirectory = g_fs.GetParentFolderName( WScript.ScriptFullName )
r= g_sh.Run( "cmd.exe /c (dir p)",,True )
If r <> 0 Then Err.Raise 1, "cmd.exe", "error 0x" & Hex(r)
cmd.exe /c (dir p)
cmd.exe
終了まで待ち、エラーレベルをチェックする
WScript.CreateObject("WScript.Shell").Run """sample.xls""",,False
エクセルファイル "sample.xls" を開く
→ 引数の区切り、ダブルクォーテーションの指定
参考
サンプル
サンプル
← ▼ ▲
Exec (Shell)
(Web)
Function Shell::Exec( PathAndParam as string ) as WshScriptExec
コマンドプロンプト・プログラムを起動します。
【引数】
PathAndParam
起動する実行ファイルのパスと、パラメータ
返り値
WshScriptExec オブジェクト
出力は常にリダイレクトされます。
プログラムが終了するまで待ちません。
→ 標準入出力、リダイレクト、エラーレベル
[ 親: WScript.Shell オブジェクト ]
WshScriptExec
コマンドプロンプトから標準入力するプログラムを指定すると、停止します。
次のように対応してください。
・
・Exec を呼び出すスクリプトを起動するとき、ファイルから標準入力へリダイレクトする
・起動するプログラムが標準入力をしないようにするオプションを指定する。
vbslib を使ったスクリプトでは、/GUI_input:1 オプションを指定してください。
・返り値の .StdIn へ、WScript.StdIn 以外から送る。
→ Shell::Exec で実行すると、pause ができない (TextStream)
参考
を使う（ただし、新しいウィンドウが開きます）
Shell::Run
→ WshScriptExec.Status
64bit Windows で、出力が WshScriptExec::StdOut から得られないとき
Exec メソッドを呼び出した cmd.exe や cscript.exe のビット数と、起動した
cmd.exe や cscript.exe のビット数が違うと、WshScriptExec::StdOut から
出力内容を得ることはできません。
Set g_sh = WScript.CreateObject( "WScript.Shell" )
If g_sh.ExpandEnvironmentStrings( "%ProgramFiles(x86)%" ) = "%ProgramFiles(x86)%" Then
If LCase( Right( WScript.FullName, 11 ) ) = "wscript.exe" Then _
g_restart_cmd_exe = "%windir%\system32\cmd" '// For 32bit Windows
Else
If LCase( Right( WScript.FullName, 11 ) ) = "wscript.exe" or _
LCase( Right( WScript.FullName, 20 ) ) = "system32\cscript.exe" Then _
g_restart_cmd_exe = "%windir%\SysWOW64\cmd" '// 32bit cmd.exe for 64bit Windows
End If
If not IsEmpty( g_restart_cmd_exe ) Then
g_sh.Run g_sh.ExpandEnvironmentStrings( g_restart_cmd_exe )+_
" /K cscript.exe //nologo """+ WScript.ScriptFullName +""""
WScript.Quit 0
End If
'// 以上は、コマンドプロンプトのウィンドウを開く処理
'// 以下は、子プロセスの標準出力を取得する処理
If g_sh.ExpandEnvironmentStrings( "%ProgramFiles(x86)%" ) = "%ProgramFiles(x86)%" Then
g_32bit_system_dir = "%windir%\system32" '// For 32bit Windows
Else
g_32bit_system_dir = "%windir%\SysWOW64" '// For 64bit Windows
End If
Set ex = g_sh.Exec( g_sh.ExpandEnvironmentStrings( g_32bit_system_dir )+_
"\cmd /C echo hello" )
Do While ex.Status = 0 : WScript.Sleep 100 : Loop
Do Until ex.StdOut.AtEndOfStream
WScript.Echo ex.StdOut.ReadLine() '// 標準出力を表示する
Loop
対策は、下記のように cmd.exe を経由して、新しいウィンドウを開くことです。
たとえば、64bit Windows で、
C:\Windows\SysWOW64\cmd.exe （32ビット版 cmd.exe）
から cscript を起動すると、PATH 環境変数の設定によって、
C:\Windows\system32\cscript.exe （64ビット版 cscript.exe）
が起動し、WshScriptExec::StdOut から出力内容を得ることはできません。
→ 引数の区切り、ダブルクォーテーションの指定
参考
← ▼ ▲
AppActivate (Shell)
ウィンドウをアクティブ（手前）にする
← ▼ ▲
RegRead (Shell)
[ 親: WScript.Shell オブジェクト ]
Function Shell::RegRead( Path as string ) as string
レジストリの値を取得します。
【引数】
Path
レジストリのパス
返り値
値
path に指定したパスが存在しないときは、エラー 0x80070002 になります。
Const E_PathNotFound = &h80070002
(Web)
→ サンプル
Path の末尾が \ のときは、キーの(標準)の値を設定します。
→ RegRead (vbslib)
関連
← ▼ ▲
RegWrite (Shell)
(Web)
Function Shell::RegWrite( Path as string, Value as variant [,Type as string] ) as string
レジストリに値を設定します。
【引数】
path
レジストリのパス
返り値
値
"REG_SZ"
"REG_DWORD"
"REG_BINARY"
"REG_MULTI_SZ"
本メソッドでは使えません
Type 引数の値
"REG_EXPAND_SZ"
環境変数を展開できる文字列
文字列
数値
バイナリ
値を格納するキーが無いときは、そのキーも作成します。
アクセス拒否されると、エラー 0x80070005 になります。
Const E_AccessDenied = &h80070005
→ レジストリ
→ サンプル
Path の末尾が \ のときは、キーの(標準)の値を設定します。
→ RegWrite (vbslib)
関連
← ▼ ▲
RegDelete (Shell)
Sub Shell::RegDelete( Path as string )
レジストリの値かキーを削除します。
【引数】
path
レジストリのパス
返り値
値
(Web)
→ サンプル
Path の末尾が \ のときは、キーを削除します。
Path の末尾が \ ではないときは、値を削除します。
← ▼ ▲
CreateShortcut (Shell)
Option Explicit
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim desktop_path : desktop_path = g_sh.SpecialFolders( "Desktop" )
Dim shcut : Set shcut = g_sh.CreateShortcut( desktop_path + "\file1.lnk" )
shcut.TargetPath = desktop_path + "\file1.txt"
shcut.Arguments = "1 2 3"
shcut.WorkingDirectory = desktop_path
shcut.Description = "This is test shortcut"
shcut.IconLocation = "foo.exe,1"
shcut.WindowStyle = 3
shcut.HotKey = "CTRL+ALT+SHIFT+X"
shcut.Save
上記のサンプルより細かい設定を追加したもの。
Function Shell::CreateShortcut( ShortcutPath as string ) as WshShortcut
(Web)
ショートカットを新規に作成するか、既存のショートカットを開きます。
デスクトップに、file1.lnk という名前のショートカットができます。
Option Explicit
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim desktop_path : desktop_path = g_sh.SpecialFolders( "Desktop" )
Dim shcut : Set shcut = g_sh.CreateShortcut( desktop_path + "\file1.lnk" )
shcut.TargetPath = desktop_path + "\file1.txt"
shcut.Save
desktop_path + "\file1.lnk"
desktop_path + "\file1.txt"
サンプル
サンプル
サンプル
既存のショートカットのリンク先を表示する。
Option Explicit
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim shortcut :Set shortcut = g_sh.CreateShortcut( "Example.lnk" )
WScript.Echo shortcut.TargetPath
Example.lnk
WshShortcut
関連
→ ReplaceShortcutFilesToFiles (vbslib)
← ▼ ▲
WshShortcut オブジェクト
ショートカット ファイルを操作するオブジェクト。
.Arguments
実行するときの引数
.Description
(Web)
.FullName
.Hotkey
.IconLocation
.TargetPath
.WindowStyle
.WorkingDirectory
リンク先のパス
実行するときのカレント フォルダー
説明文
アイコンのパス
実行するときのウィンドウの表示方法
ホット キー
ショートカット ファイルのパス
← ▼ ▲
Popup (Shell)
(Web)
Function Shell::Popup( Text as string, SecondToWait as integer, Title as string, Type as integer )
as integer
メッセージボックスを表示します。
【引数】
Text
SecondToWait
表示する内容
自動的に閉じるまでの時間（秒）
Title
メッセージボックスのタイトルに表示する内容
押されたボタン、 自動的に閉じたとき = -1
返り値
メッセージボックスの種類
Type
MsgBox
との違いは、自動的に閉じるまでの時間が指定できることです。
カウントダウン表示はしません。
← ▼ ▲
WshScriptExec オブジェクト
(Web)
.Status
.StdIn
.StdOut
.StdErr
0=実行中（WshRunning）、1=終了（WshFinished）
.Terminate
Dim ex
Set ex = g_sh.Exec( "..." )
ex.StdIn.Write "Y"+vbCRLF
.StdIn の例
（下記）
→ Windows管理者のためのWindows Script Host入門：第5回 (3-4) - ＠IT (Web)
参考
.ExitCode
.ProcessID
(Web)
(Web)
← ▼ ▲
Status (WshScriptExec)
で実行したプログラムが実行中かどうか。 0=実行中、1=終了
Dim WshScriptExec::Status as integer
サンプル
Exec (Shell)
text = ""
Do While ex.Status = 0 : WScript.Sleep 100 : text = text + ex.StdOut.ReadAll() : Loop
実行したプログラムの標準出力を取り出さないと、実行したプログラムが止まることがあります。
←
↓