Windows2000以降はWSH(Windows Scripting Host)が標準で備わっており、特別な準備をしなくともVBScript、JScriptが使える。ファイルのコピーだとかの基本的なシェルの機能は勿論、IDispatchを備えるオブジェクトならなんでも手軽に操作することができる。

Windows Script File *

XMLで強烈に柔軟性を持たせたもの。他ファイルのインクルードはおろか、複数のスクリプトエンジンの同居もできてしまう。「Windows スクリプト ファイル (.wsf) を使用する」からの抜粋だが

<job id="IncludeExample">
   <script language="JScript" src="FSO.JS"/>
   <script language="VBScript">
      ' C ドライブの空き領域を取得します。
      s = GetFreeSpace("c:")
      WScript.Echo s
   </Script>
</job>

などとできるわけである。凝りすぎ?

VBScript *

利点 *

link *

memo *

雑多 *

Wscript.sleep(1000) ' 1000[ms] 待つ
WScript.Quit ' やめる
msgbox("hello" & "world") ' メッセージボックスを表示
inputbox("type the param") ' パラメータ入力可能なダイアログ

' ループ
Dim i
For i = 1 To 10
  ' any
Next

' ループをやめるかどうかの確認つき
Do
  msgbox "loop"
Loop While vbYes = msgbox("continue?", vbYesNo)

msgbox "this is ""quoted"" string" ' 「"」のエスケープはバックスラッシュでなく連打で行う

ファイルIO *

ほとんど[VBScript Tips]の引用。単純には(Closeは要らんかな?)

Dim objFSO, objFile

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("test.txt", 2, True)
objFile.Write("Hello" & vbCrLf)
objFile.Close

で、真面目にやるなら

Dim objFSO, objFile

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Then
    Set objFile = objFSO.OpenTextFile("test.txt", 2, True)
    If Err.Number = 0 Then
        objFile.Write("Hello")
        objFile.Close
    Else
        WScript.Echo "file open error: " & Err.Description
    End If
Else
    WScript.Echo "error: " & Err.Description
End If

Set objFile = Nothing
Set objFSO = Nothing

作品 *

ショートカット作成 *

引数で指定されたフォルダへのショートカットをHOMEディレクトリに作成するスクリプト。「送る」フォルダにcreateshortcut.vbsとして配置すれば、右クリックから呼出せて便利だなあと思って作ったが、デスクトップにショートカットを作成するものが既にあり、存在意義が8割がた失われた。でもまあ学習記録として貼っておく。

Option Explicit
Dim objWshShell, objShortcut, strHomeDirPath, strTargetDirName, strTargetDirPath

Set objWshShell = WScript.CreateObject("WScript.Shell")

If 0=WScript.Arguments.Count Then 
  msgbox "no arg"
  WScript.Quit 
Else 
  Dim objFileSystem
  Set objFileSystem = WScript.CreateObject("Scripting.FileSystemObject")
  strTargetDirPath = WScript.Arguments(0)
  If objFileSystem.FolderExists(strTargetDirPath) Then
    strTargetDirName = objFileSystem.GetBaseName(strTargetDirPath)
  Else
    msgbox "invalid arg (not a folder)"
    WScript.Quit
  End If
End If 

strHomeDirPath = objWshShell.ExpandEnvironmentStrings("%HOME%")

Set objShortcut = objWshShell.CreateShortcut(strHomeDirPath & "\" & strTargetDirName & ".lnk")

objShortcut.Description = strTargetDirName
objShortcut.TargetPath = strTargetDirPath
objShortcut.Save

JScript *

利点 *

link *


Last-modified: Mon, 24 Jul 2006 21:54:56 JST