VBS(Visual Basic Script)はWindows の汎用スクリプト言語で、Windowsに標準でついている便利なツールです。
Webのスクリプト言語では出来ない、ローカル処理を行う場合には有効です。ここではちょっと便利な簡単な使い方のサンプルを掲載します。
目次:ローカルファイルの入出力/内部ソート/処理状況表示/その他
テキストファイルの入出力 (サンプルの実行)
FileSystemObject オブジェクトを使用してWriteLine、ReadLineメソッドで書き込み、読込処理を行います。fileName = InputBox("ファイル名を入力してください。", "ファイル入出力", "C:\Users\Public\sample.txt")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set f = objFSO.OpenTextFile(fileName ,2,true)
f.WriteLine("data 1")
f.WriteLine("data 2")
f.Close
Set f = objFSO.OpenTextFile(fileName ,1)
Do Until f.AtEndOfStream = True
str = f.ReadLine
data = data & str & vbCrLf
Loop
MsgBox data
f.Close
UTF-8ファイルの入出力 (サンプルの実行)
ADO(ActiveX Database Object)の Stream オブジェクト(ADODB.Stream)を使用すると UTF-8 形式のテキストファイルを読み込み・書き込みが出来ます。fileName = InputBox("ファイル名を入力してください。", "ファイル入出力", "C:\Users\Public\sample.txt")
Set f = CreateObject("ADODB.Stream")
f.Open
f.Type = 2
f.Charset = "UTF-8"
f.LineSeparator = 10
f.LoadFromFile fileName
f.WriteText "utf-8 data 1", 1
f.WriteText "utf-8 data 2", 1
' 書き出しファイルの保存
f.SaveToFile fileName, 2
f.Close
f.Open
f.Type = 2
f.Charset = "UTF-8"
f.LineSeparator = 10
f.LoadFromFile fileName
'読込処理
Do Until f.EOS
str = f.ReadText(-2)
data = data & str & vbCrLf
loop
MsgBox data
f.Close
ディレクトリファイル処理 (サンプルの実行)
指定したディレクトリーのファイル名をすべて表示します。
fileName = InputBox("ディレクトリー名を入力してください。", "ファイル情報一覧", "C:\Users\Public")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(fileName)
For Each File In objFolder.Files
strFiles = strFiles & File.Name & vbCrLf
Next
MsgBox strFiles
フォルダー処理 (サンプルの実行)
指定したディレクトリーのデイレクトリー名をすべて表示します。
fileName = InputBox("ディレクトリー名を入力してください。", "フォルダー名一覧", "C:\Users\Public")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(fileName)
For Each objSubFolder In objFolder.SubFolders
strFolder = strFolder & objSubFolder.Name & vbCrLf
Next
MsgBox strFolder
内部ソート (サンプルの実行)
ソート処理は「Fields.Append」でフィールドを定義して、「AddNew」でデータを渡して、「Sort 」でソート順を指定して、ソートした結果を「MoveFirst」、「MoveNext」で受け取ります。
Const adWChar = 130
Set Rs = CreateObject("ADODB.Recordset")
'フイールドの定義
Rs.Fields.Append "sKey", adWChar ,10
Rs.Fields.Append "sData", adWChar ,200
Rs.Open()
'データを渡す処理
Rs.AddNew
Rs.Fields("sKey").value = "key3"
Rs.Fields("sData").value = "データー 3"
Rs.AddNew
Rs.Fields("sKey").value = "key1"
Rs.Fields("sData").value = "データー 1"
Rs.AddNew
Rs.Fields("sKey").value = "key4"
Rs.Fields("sData").value = "データー 4"
Rs.AddNew
Rs.Fields("sKey").value = "key2"
Rs.Fields("sData").value = "データー 2"
'ソート順の設定
jyun = InputBox("1:昇順、2:降順", "ソート順指定", "1")
if jyun = 1 Then
Rs.Sort = "sKey"
Else
Rs.Sort = "sKey DESC"
End If
'ソート済データの取得
Rs.MoveFirst
Do while not Rs.EOF
str = str & Rs.Fields("sKey").Value & Rs.Fields("sData").Value & vbCrLf
Rs.MoveNext
Loop
Rs.Close()
MsgBox str
処理状況表示 (サンプルの実行)
実行するプログラムよりInternetExplorerを起動して、進捗状況のメッセージをHTML形式で書き出して、表示出来ます。
Set ie = CreateObject("InternetExplorer.Application")
call ieInt()
call ieMsg("*****開始*****")
call ieMsg("*****処理中****")
call ieMsg("*****終了*****")
MsgBox "終了"
call ieClose()
Sub ieInt()
With ie
.Navigate("about:blank")
.ToolBar = False
.StatusBar = False
.Width = 600
.Height = 200
.Document.Charset = "UTF-8"
.Visible = True
.Document.Title = "スクリプト実行中"
End With
End Sub
Sub ieMsg(value)
With ie
.Document.Body.innerHTML = .Document.Body.innerHTML & value & "<br>"
.Document.Script.setTimeout "javascript:scrollTo(0," & .Document.Body.ScrollHeight & ");", 0
End With
End Sub
Sub ieClose()
ie.Quit
Set ie = Nothing
End Sub
HTA (サンプルの実行)※ダウンロード後にファイル識別子を「.hta」に変更して実行してください。
HTA(HTML Applications)はHTMLの機能をベースとしているので、HTMLを記述する感覚でアプリケーションの作成が出来ます。
その中にVBSの記述が可能で、HTMLと連携してテキストエリア、実行ボタン、HTMLでの結果表示などを使ったプログラミングが出来ます。
HTMLファイルの拡張子を「.html」から「.hta」に変更することで、Internet ExplorerはHTAのファイルとして認識して、実行します。
<html><head>
<title>フォルダの一覧を表示</title></head>
<body>
<form name="form1">
<p>パスを入力してください<input type="text" name="path" value="" size="30"></p>
<p><input type="button" value="実行" onClick="show_result()"><input type="reset" value="クリア"></p>
<p><textarea name="kekka" cols="80" rows="30"></textarea></p>
</form>
<script language="VBScript">
'HTMLタグのscript... から /script の間にVBSを書きます。
Dim objFSO
Dim objFolder
Set objFSO = CreateObject("Scripting.FileSystemObject")
'プログラム読込完了後の処理
Sub Window_OnLoad
Window.ResizeTo 800,800
End Sub
'ファイル情報取得処理
Function listup_files()
Dim strFiles
Dim File
For Each File In objFolder.Files
strFiles = strFiles & File.Name & "(" & File.Size & ")" & File.Type & vbCrLf
Next
listup_files = strFiles
End Function
'メイン処理(入力チェック、結果表示)
Sub show_result()
Dim strResult
if document.form1.path.value = "" Then
document.form1.kekka.value = "パスを入力してください"
Exit Sub
End if
If objFSO.FolderExists(document.form1.path.value) = FALSE Then
document.form1.kekka.value = "パス名が正しくありません"
Exit Sub
End If
Set objFolder = objFSO.GetFolder(document.form1.path.value)
strResult = listup_files
document.form1.kekka.value = strResult
End Sub
</script>
</body></html>