WSH(Windows Scripting Host)

WSHVBAVBSサイトマップホーム

 Windows Script Host(WSH)は、Windows98/2000/ME/XPに標準で付いている便利なツールです。このツールはバッチファイルやマクロのようにある決まった動作を自動的に実行出来、 一度書いたスクリプトは何回でも使用できますので、毎回手作業でおこなっていた処理が自動化され、手間が省けます。
詳細はMicrosoftの公式ページMicrosoft TechNet スプリクトセンタを参照してください。
ここではちょっと便利な簡単な使い方のサンプルを掲載します。

目次:プログラムの起動キーインシュミュレーション ファイルの操作サブルーチンコール関数

プログラムの起動

電卓の起動サンプルの実行

Set WshShell=Wscript.CreateObject("Wscript.Shell")
WshShell.Run"calc.exe"

Excelの起動サンプルの実行

Set e=Wscript.CreateObject("Excel.Application")
e.Visible=TRUE
e.WorkBooks.Add
e.Columns(3).ColumnWidth=30
e.Cells(2,3).Value="***********************"

Webサイトの起動サンプルの実行

'
'Webサイトのログイン(googleの起動)
'
Set WshShell=Wscript.CreateObject("Wscript.Shell")
WshShell.Run("http://www.google.co.jp/") 'Webサイトの起動
WScript.Sleep(4000)
WshShell.SendKeys("tomari.org") '検索キーの入力
WshShell.SendKeys("{ENTER}") '送信キー押下

キーインシュミュレーション

Webサイトの自動ログイン

'
'Webサイトのログイン
'
Set WshShell=Wscript.CreateObject("Wscript.Shell")
WshShell.Run("http://www.xxxxx.co.jp/direct/start.html") 'Webサイトの起動
WScript.Sleep(4000)
WshShell.SendKeys("abcdef123") 'IDの入力
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}") 
WScript.Sleep(1000)
WshShell.SendKeys("123456") 'パスワードの入力
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}")

IEのお気に入りをエクスポートサンプルの実行

'
'IEのお気に入りをエクスポートする。
'
Set WshShell=Wscript.CreateObject("Wscript.Shell")
WshShell.Run("iexplore") 'IEの起動
WScript.Sleep(2000)
WshShell.SendKeys("%F") 'ALT+Fキーでファイルのメニューを選択
WScript.Sleep(200)
WshShell.SendKeys("I") 'メニューより、Iキーで「インポートおよびエクスポート」を選択
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}") 'インポート/エクスポートウイザードを進める
WScript.Sleep(200)
WshShell.SendKeys("{DOWN}") 'カーソルをダウンしてお気に入りのエクスポートを選択
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}") '以下、インポート/エクスポートウイザードを進める
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}")
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}")
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}")
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}")
WScript.Sleep(200)
WshShell.SendKeys("{ENTER}")
WScript.Sleep(200)
WshShell.SendKeys("%F") 'ALT+Fキーでファイルのメニューを選択
WScript.Sleep(200)
WshShell.SendKeys("C") 'メニューより、Cキーで「終了」を選択
WScript.Sleep(200)

シュミュレーションのキーコード

'
'キーシュミュレーションのキーの指定
'
'特殊キー
'BackSpace = {BS}
'Break = {BREAK}
'CapsLock = {CAPSLOCK}
'Del = {DEL}
'End = {END}
'Esc = {ESC}
'Home = {HOME}
'Insert = {INSERT}
'NumLock = {NUMLOCK}
'PrintScreen = {PRTSC}
'ScrollLOCK = {SCROLLLOCK}
'Tab = {TAB}

'カーソルキー
'Up = {UP}
'Down = {DOWN}
'Right=  {RIGHT}
'Left = {LEFT}
'PageUp = {PGUP}
'PageDown = {PGDN}

'ファンクションキー
'F1 = {F1}
'F12 = {F12}

'組み合わせで使う
'Shift = +
'Ctrl = ^
'Alt = %

ファイルの操作

ファイルのコピー

Set fs=WScript.CreateObject("Scripting.FileSystemObject")
Set ws=WScript.CreateObject("WScript.Shell")
i="c:tmp.txt"
o="c:xxxtmp.txt"
msg=MsgBox (i&"から"&o&"へコピーします。いいですか?",vbYesNo)
If msg=vbYes Then fs.CopyFile i,o

バックアップ

msg=MsgBox("バックアップします。いいですか?",vbYesNo)
If msg=vbYes Then 
  dtmThisDay = Day(Date) 
  dtmThisMonth = Month(Date) 
  dtmThisYear = Year(Date) 
  strBackupName = "backup_" & dtmThisYear & "_" & dtmThisMonth & "_" & dtmThisDay 
  set fso = CreateObject("Scripting.FileSystemObject")
  If (fso.FolderExists("c:\" & strBackupName)) Then
  'フォルダの削除
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    objFSO.DeleteFolder("c:\" & strBackupName) 
  end if
  'フォルダのコピー
  Const OverWriteFiles = True 
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
  objFSO.CopyFolder "d:\tom\www\home" , "d:\" & strBackupName & "\home" ,    OverWriteFiles
  objFSO.CopyFolder "d:\tom\java" , "d:\" & strBackupName & "\java" , OverWriteFiles
  objFSO.CopyFolder "d:\tom\note" , "d:\" & strBackupName & "\note" , OverWriteFiles
  objFSO.CopyFolder "d:\tom\wsh" , "d:\" & strBackupName & "\wsh" , OverWriteFiles
  objFSO.CopyFolder "d:\tom\sozai" , "d:\" & strBackupName & "\sozai" , OverWriteFiles
  MsgBox( "バックアップ終了しました。")
end if

ファイルの操作例

'ファイルのコピー
Const OverwriteExisting = True 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.CopyFile "C:\FSO\ScriptLog.txt" , "D:\Archive\", OverwriteExisting

'フォルダのコピー
Const OverWriteFiles = True 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.CopyFolder "C:\Scripts" , "C:\FSO" , OverWriteFiles

'複数のファイルのコピー
Const OverwriteExisting = True 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.CopyFile "C:\FSO\*.txt" , "D:\Archive\" , OverwriteExisting

'フォルダの作成
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.CreateFolder("C:\FSO") 

'新しいフォルダの作成
ParentFolder = "C:\" 
set objShell = CreateObject("Shell.Application") 
set objFolder = objShell.NameSpace(ParentFolder) 
objFolder.NewFolder "Archive" 

'ファイルの削除
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.DeleteFile("C:\FSO\ScriptLog.txt") 

'フォルダの削除
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.DeleteFolder("C:\FSO") 

'フォルダ内のすべてのファイルの削除
Const DeleteReadOnly = True 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.DeleteFile("C:\FSO\*.txt"), DeleteReadOnly 

'フォルダの削除
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colFolders = objWMIService.ExecQuery _ 
("Select * from Win32_Directory where Name = 'c:\\Scripts'") 
For Each objFolder in colFolders 
errResults = objFolder.Delete 
Wscript.Echo errResults 
Next

'ファイルの名前変更
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.MoveFile "C:\FSO\ScriptLog.txt" , "C:\FSO\BackupLog.txt" 

'単一フォルダの名前変更
Set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.MoveFolder "C:\FSO\Samples" , "C:\FSO\Scripts" 

'複数フォルダの名前変更
strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colFolders = objWMIService.ExecQuery _ 
("Select * from Win32_Directory where name = 'c:\\Scripts'") 
For Each objFolder in colFolders 
errResults = objFolder.Rename("C:\Script Repository") 
Wscript.Echo errResults 
Next 

'テキスト ファイルの作成および名前指定
Set objFSO = CreateObject("Scripting.FileSystemObject") 
strPath = "C:\FSO" 
strFileName = objFSO.GetTempName 
strFullName = objFSO.BuildPath(strPath, strFileName) 
Set objFile = objFSO.CreateTextFile(strFullName) 
objFile.Close 
objFSO.DeleteFile(strFullName)

'テキスト ファイルの作成
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.CreateTextFile("C:\FSO\ScriptLog.txt")

'テキスト ファイルへのデータの書き込み
Const ForAppending = 2 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objTextFile = objFSO.OpenTextFile _ 
("c:\scripts\service_status.txt", ForAppending, True) 
Set colServices = GetObject("winmgmts:").ExecQuery _ 
("Select * from Win32_Service") 
For Each objService in colServices 
objTextFile.WriteLine(objService.DisplayName & vbTab & _ 
objService.State) 
Next 
objTextFile.Close 

'テキスト ファイルの書き込み
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.CreateTextFile("C:\tmp.txt",True)
f.WriteLine("一行目")
f.WriteLine("二行目")
f.close

'テキスト ファイルの追加
Set fs = CreateObject("Scripting.FileSystemObject")
Set tmp = fs.GetFile("C:\tmp.txt")
Set f = tmp.OpenAsTextStream(8,0)
f.WriteLine("追加")
f.close

'テキスト ファイルの読込み
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("C:\tmp.txt")
Do Until f.AtEndOfStream
  data = f.ReadLine
  WScript.Echo data
Loop

特殊フォルダーの取得サンプルの実行

'SpecialFoldersプロパティで取得できる特殊フォルダ
' objShell.SpecialFolders("フォルダ指定")
'----------------------------------------------------------
'フォルダ指定 :意味
'AllUsersDesktop:All Usersのデスクトップ 
'AllUsersStartMenu:All Usersのスタート・メニュー 
'AllUsersPrograms :All Usersのスタート・メニューの「すべてのプログラム」 
'AllUsersStartup :All Usersのスタート・メニューの「スタートアップ」 
'Desktop :デスクトップ 
'Favorites :お気に入り 
'Fonts :フォント 
'MyDocuments :マイ・ドキュメント 
'NetHood :マイ・ネットワーク 
'PrintHood :プリンタ 
'Programs :スタート・メニューの「すべてのプログラム」 
'Recent :最近使ったファイル 
'SendTo :コンテキスト・メニューの「送る」 
'StartMenu :スタート・メニュー 
'Startup :スタート・メニューの「スタートアップ」 
'Templates :ファイルの新規作成のテンプレート 
'
Set objShell = WScript.CreateObject("WScript.Shell")
WScript.Echo "Desktop:" & objShell.SpecialFolders("Desktop")
WScript.Echo "Favorites: " & objShell.SpecialFolders("Favorites")
WScript.Echo "MyDocuments: " & objShell.SpecialFolders("MyDocuments")
WScript.Echo "SendTo: " & objShell.SpecialFolders("SendTo")
WScript.Echo "StartMenu: " & objShell.SpecialFolders("StartMenu")
WScript.Echo "Startup: " & objShell.SpecialFolders("Startup") 

サブルーチンコール

サブルーチン(WSH)の呼び方サンプルの実行

Set sh = CreateObject("WScript.Shell")
sh.run "sub1.vbs  引数1 引数2"

サブルーチン(Dosコマンド)の呼び方サンプルの実行

Set sh = CreateObject("WScript.Shell")
sh.Run "cmd.exe /c""pause"    'DOSコマンドの実行(Dos Windowをクリア)
sh.Run "cmd.exe /k""dir"         'DOSコマンドの実行(Dos Windowをキープ)

サブルーチンの引数処理 

'サブルーチン:sub1.vbs
If WScript.Arguments.Count > 0 Then   '引数1あり?
h1 = WScript.Arguments.Item(0)
Else
h1 = "引数1なし"
End If
If WScript.Arguments.Count > 1 Then   '引数2あり?
h2 = WScript.Arguments.Item(1)
Else
h2 = "引数2なし"
End If
If WScript.Arguments.Count > 2 Then   '引数3あり?
h3 = WScript.Arguments.Item(2)
Else
h3 = "引数3なし"
End If
WScript.Echo h1 & vbNewLine & h2 & vbNewLine & h3

関数

日付、時間、文字列操作、その他サンプルの実行

dim dsp(25)
dsp(00) = "システム日時:" & now 
dsp(01) = "日付 :" & date
dsp(02) = "年  :" & year(date)
dsp(03) = "月  :" & month(date)
dsp(04) = "日  :" & day(date)
dsp(05) = "曜日 :" & weekday(date)
dsp(06) = "時刻 :" & time
dsp(07) = "時間 :" & hour(time)
dsp(08) = "分  :" & minute(time)
dsp(09) = "秒  :" & second(time)

dsp(10) = "Sin(45):" & Sin(45)
dsp(11) = "Cos(45):" & Cos(45)
dsp(12) = "Tan(45):" & Tan(45)
dsp(13) = "Atn(45):" & Atn(45)

dsp(14) = "絶対値:" & Abs(-55.5)
dsp(15) = "実数 :" & Int(-55.9)
dsp(16) = "整数 :" & Fix(-55.9)
dsp(17) = "符号 :" & Sgn(-55.9)

dsp(18) = "先頭の文字:" & Left("abcde",2)
dsp(19) = "末尾の文字:" & Right("abcde",2)
dsp(20) = "中間の文字:" & Mid("abcde",2,4)

dsp(21) = "文字数    :" & Len("七八九")
dsp(22) = "文字のバイト数:" & LenB("七八九")

Set net = CreateObject("WScript.Network")
dsp(23) = "コンピュータ名:" & net.ComputerName 
dsp(24) = "ドメイン名  :" & net.UserDomain 
dsp(25) = "ユーザ名   :" & net.UserName 

w = ""
for i = 0 to 25
w = w & dsp(i) & vbNewLine
next
WScript.Echo w

WSHVBAVBSサイトマップホーム