【私的】WSH / VBScript めも

はてなブックマーク TOPSY

2012.1.14 FileVersion.vbs を修正
最終更新日 2012.1.14

とっても初歩的私的(何)・・・

cmd.exe では限界あるので、ちゃんと覚えないとだめですね...やっぱり?(何)

尚、陳腐なお約束でありますが、ここのスクリプトについては全くの初心者レベルなので at your own risk ということで。

入門編 3

WSHを始めよう − @IT

WSHの基本から。めちゃ丁寧な解説。

@IT:運用 Windows管理者のためのWindows Script Host入門

オブジェクトの詳細など。

ページ先頭 U

Microsoft資料 4

WSH(wscript.exe)のバージョン
  • Windows XP SP3 - 5.7.0.18066
  • Windows XP SP2 - 5.6.0.8820
  • Windows 2000 SP4 - 5.6.0.6626

Windows Script 5.6 ドキュメント(chmヘルプファイル)がダウンロードできます。

MSDN ドキュメント

Windows Script Host
リファレンス
VBScript

戻る | ページ先頭 U

Microsoft その他

戻る | ページ先頭 U

基本 5

  1. 記述規則
  2. 変数
  3. オブジェクト
  4. メソッド
  5. 関数
  6. ステートメント
  • オブジェクトの作成
'オブジェクト変数の宣言とFileSystemObjectオブジェクトの作成。
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'オブジェクト変数の宣言とWshShellオブジェクトの作成。
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")

'メモ帳を起動。
objWshShell.Run "C:\Windows\System32\notepad.exe"

戻る | ページ先頭 U

記述規則

コード記述規則

規則ではないけど、区別するために。下記推奨

変数の名前付け規則
内部処理形式プリフィックス使用例
ブール型(Boolean)bln, bblnFound
バイト型bytbytRasterData
日付型dtm, dtdtmStart
倍精度浮動小数点数型dbl, ddblTolerance
エラー型errerrOrderNum
整数型int, iintQuantity
長整数型lng, llngDistance
オブジェクト型obj, oobjCurrent
単精度浮動小数点数型sngsngAverage
文字列型str, sstrFirstName

戻る | ページ先頭 U

変数

配列

戻る | ページ先頭 U

オブジェクト

WScript オブジェクト
WshShell オブジェクト
FileSystemObject
Windows Management Instrumentation (Windows)
サンプル

戻る | ページ先頭 U

メソッド

戻る | ページ先頭 U

関数

変換関数
  • 10進数を16進数に
    • 10進数の【10】を16進数に
    • Hex(10) - 値は A
  • 16進数を10進数に
    • 16進数の【10】を10進数に
    • CInt(&H10) - 値は 16
    • CLng(&H10) - 値は 16

戻る | ページ先頭 U

ステートメント

Call ステートメント

Sub プロシージャおよび Function プロシージャの呼び出し

Class ステートメント

Class の定義

Sub ステートメント

Sub プロシージャの定義

Function ステートメント

Function プロシージャの定義

If...Then...Else ステートメント

条件分岐

If condition Then
   [statements]
[ElseIf condition-n Then
   [elseifstatements]] . . .
[Else
   [elsestatements]]
End If
  • If - Then - ElseIF - Then - End IF
If Err.Number = 11 Then
        '0除算エラー。
        MsgBox "0で割ることはできません。"
    ElseIf Err.Number = 13 Then
        '型不一致エラー。
        MsgBox "数値を入力してください。"
    ElseIf Err.Number = 0 Then
         'エラーが発生していない場合はループを抜ける。
        Exit Do
    Else
        'そのほかのエラーの場合。
        MsgBox "想定外のエラーです。"
    End If
    'エラー情報をクリアする。
    Err.Clear
    On Error Goto 0
Select Case ステートメント

条件分岐

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else expressionlist-n
      [elsestatements-n]]
End Select
  • Select - Case - Else - End Select
Select Case Err.Number
        Case 11
            '0除算エラー。
            MsgBox "0で割ることはできません。"
        Case 13
            '型不一致エラー。
            MsgBox "数値を入力してください。"
        Case 0
            'エラーが発生していない場合はループを抜ける。
            Exit Do
        Case Else
            'そのほかのエラーの場合。
            MsgBox "想定外のエラーです。"
End Select
On Error ステートメント

実行時エラー発生時の続行処理

On Error Resume Next
On Error GoTo 0
On Error Resume Next
Err.Raise 6   ' オーバーフロー エラーを発生させます。
MsgBox ("エラー番号 " & CStr(Err.Number) & " " & Err.Description
Err.Clear   ' エラーのクリア。
For...Next ステートメント

指定した回数で繰り返し

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next
For Each...Next ステートメント

配列やコレクションを指定して繰り返し

For Each element In group
   [statements]
   [Exit For]
   [statements]
Next [element]
Do...Loop ステートメント

条件が真である間(While)、条件が真になるまで (Until)、繰り返し

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop 
While...Wend ステートメント

条件が真の間、繰り返し

While condition
   Version [statements]
Wend
With ステートメント (VBScript)

まとめて設定

With object
   statements
End With

戻る | ページ先頭 U

Tips 6

いろいろ

戻る | ページ先頭 U

テキストへ書き込み

  • ※標準出力(cscript.exe で実行)
Dim StdOut,StdIn
Set StdOut = WScript.StdOut
Set StdIn = WScript.StdIn
Dim strX
strX = StdIn.ReadLine()
StdOut.WriteBlankLines 1
strX = StrReverse(strX)
StdOut.WriteLine strX
cscript //NoLogo StdInStdOut.vbs >std.txt
Option Explicit
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Dim objTxt
Set objTxt = objFSO.OpenTextFile("test1.txt", 8, true, -2)
Dim objWS
Set objWS = WScript.CreateObject("WScript.Shell")
' Image File Execution Options の不正キー
Dim strEXEname,I
strEXEname = Array("regedit.exe", "regedit.com", "taskmgr.exe", "notepad.exe")
Const strKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\"
For Each I In (strEXEname)
     On Error Resume Next
          objWS.RegRead strKey & I & "\"
          If Err.Number = -2147024894 Then
               WScript.Echo I, "キーはありません"
               objTxt.WriteLine I & "キーはありません"
          ElseIf Err.Number = 0 Then
               WScript.Echo I, "キーは存在します"
               objTxt.WriteLine I & "キーは存在します"
          End If
          Err.Clear
     On Error Goto 0
Next
objTxt.Close
objWS.Run "test1.txt"
Set objFSO = Nothing
Set objTxt = Nothing

戻る | ページ先頭 U

レジストリ

指定パスでRegeditを起動

LastKey にパスを書き込んで regedit.exe を(再)起動

指定キーの既定エントリ・指定エントリの読み取り

WshShell オブジェクトの RegRead メソッドを利用する

  • 指定エントリのデータを読み取り(REG_BINARY,REG_MULTI_SZ はだめ)
指定キーのサブキー・値エントリの列挙

WMI(Windows Management Instrumentation)サービスの StdRegProv Class を利用する

戻る | ページ先頭 U

小ネタ

文字列を文字コード(符号)へ
カンマ(,)区切りの文字コード(符号)を文字列へ
レジストリ【REG_EXPAND_SZ】値を文字列に変換
HTMLの文字参照

【&】【"】【<】【>】を変換。

最初の実行で空ファイル(Entity_Test1.txt)が開くので、そこにソース(複数行可)を貼付・保存後に再度スクリプトを実行。

数値文字参照(10進数)へ

文字実体参照へ

OSバージョンなど

OSバージョン、Service Pack、物理メモリ量など

Office のバージョン(2000/2002/2003のみ...不完全かも?)

ファイルのバージョンチェック

※ あまり確認してないのでいまいちかも。

バッチファイル(bat)用。コマンドラインで実行。標準出力

cscript //nologo FileVersion_for_Batch.vbs "パス\ファイル名"

テキストへ書き出し

FileVersion.vbs "パス\ファイル名"

右クリック「送る」メニューやD&Dでもおk。

プラグインなどのバージョンチェック

旧バージョンのチェックはいまいち。仕様が変わる度にスクリプトの修正が必要かも。

戻る | ページ先頭 U

参考リンク 7

ページ先頭 U

めも 8

関連付け実行

エディタで編集中ファイルのスクリプト実行。ツールバーのボタンなどに登録しておくと便利。

秀丸エディタ
  • コマンド一覧ファイル系関連付けで開く
  • プログラム実行 - wscript "%f"
  • プログラム実行 - cmd /k cscript "%f"
EdTex(EdLeaf)

【外部ツール】の実行、または【ユーザーツール】に登録

  • wscript
    • パス - C:\WINDOWS\system32\wscript.exe
    • パラメータ - "$f"
  • cscript
    • パス - C:\WINDOWS\system32\cscript.exe
    • パラメータ - "$f"
    • 出力結果をリダイレクト
Microsoft Script Editor

MIcrosoft Office に付属。

ページ先頭 U

Written by yassy