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