- 2021.4.1 移転しました...
-
- このページの旧URLは
http://www10.plala.or.jp/palm84/wsh.html
- このページの旧URLは
- 内容古いです!
-
最終更新日は 2012.1.14、ご注意。
(Google ドライブ以外の) リンク先テキストファイル (.txt) はブラウザで開くと文字化けするのでご注意。
- INDEX
2012.1.14 FileVersion.vbs を修正
最終更新日 2012.1.14
とっても初歩的私的(何)・・・
cmd.exe では限界あるので、ちゃんと覚えないとだめですね...やっぱり?(何)
尚、陳腐なお約束でありますが、ここのスクリプトについては全くの初心者レベルなので at your own risk
ということで。
入門編
- WSHを始めよう - @IT
-
WSHの基本から。めちゃ丁寧な解説。
- @IT:運用 Windows管理者のためのWindows Script Host入門
-
オブジェクトの詳細など。
Microsoft資料
- 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 2000 および Windows XP 用の Windows Script 5.6(バージョンは 5.6.0.8831)
Windows Script 5.6 ドキュメント(chmヘルプファイル)がダウンロードできます。
MSDN ドキュメント
Microsoft その他
基本
- オブジェクトの作成
'オブジェクト変数の宣言と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"
記述規則
- リテラル文字列は引用符【
"
】で囲む、変数は囲まない - リテラル文字連結は【
&
】 - リテラル文字列改行は 【
& vbCrLf &
】 - コードの改行【
_
】
- コード記述規則
-
規則ではないけど、区別するために。下記推奨
変数の名前付け規則 内部処理形式 プリフィックス 使用例 ブール型(Boolean) bln, b blnFound バイト型 byt bytRasterData 日付型 dtm, dt dtmStart 倍精度浮動小数点数型 dbl, d dblTolerance エラー型 err errOrderNum 整数型 int, i intQuantity 長整数型 lng, l lngDistance オブジェクト型 obj, o objCurrent 単精度浮動小数点数型 sng sngAverage 文字列型 str, s strFirstName
変数
- 配列
オブジェクト
- WScript オブジェクト
- WshShell オブジェクト
- FileSystemObject
- Windows Management Instrumentation (Windows)
メソッド
- VBScript のメソッド
- Windows Script Host - メソッド(WScript)
- WshShell オブジェクトのプロパティとメソッド
- FileSystemObject のメソッド
関数
- 変換関数
-
- 10進数を16進数に
- 10進数の【10】を16進数に
Hex(10)
- 値は A
- 16進数を10進数に
- 16進数の【10】を10進数に
CInt(&H10)
- 値は 16CLng(&H10)
- 値は 16
- 10進数を16進数に
ステートメント
- 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
Tips
いろいろ
- Windows Script World
- tips: レジストリ操作(JScript)
テキストへ書き込み
- WriteLine メソッド (Windows Script Host)
- StdOut または StdErr テキスト ストリーム オブジェクト(改行あり)
- Write メソッド (Windows Script Host)
- WriteBlankLines メソッド (Windows Script Host)
- Read メソッド (Windows Script Host)
- ReadAll メソッド (Windows Script Host)
- ReadLine メソッド (Windows Script Host)
- StrReverse 関数
- 標準入出力と標準エラー出力 - WScriptオブジェクトを利用する(2)
- @IT:運用 Windows管理者のためのWindows Script Host入門 第3回 WScriptオブジェクトの詳細(1) 3.データ入出力と電卓サンプル
- ※標準出力(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
- FileSystemObjectによるテキスト・ファイルの読み書き
- WriteLine メソッド (FileSystemObject)
- OpenTextFile メソッド (FileSystemObject)
- Run メソッド (WScript.Shell)
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
レジストリ
- 指定パスでRegeditを起動
-
LastKey
にパスを書き込んで regedit.exe を(再)起動- Regedit_To_Path.vbs(.txt)
- Regedit_To_Path-vista.vbs(.txt)
- Regedit2Path.vbs(.txt)
- Regedit2Path.vbs(.txt)
- 指定キーの既定エントリ・指定エントリの読み取り
-
WshShell オブジェクトの
RegRead
メソッドを利用する- RegReadメソッド - WshShellオブジェクトを利用する
- RegWriteとRegDeleteメソッド - WshShellオブジェクトを利用する
- Windows Script Host の RegDelete メソッドは、サブキーを含むキーは削除できません。
- 指定エントリのデータを読み取り(REG_BINARY,REG_MULTI_SZ はだめ)
- RegRead_RegEntry.vbs(.txt)
- RegRead_RegEntry.vbs(.txt)
- 指定キーのサブキー・値エントリの列挙
-
WMI(Windows Management Instrumentation)サービスの
StdRegProv Class
を利用する- レジストリの値およびタイプの列挙
- サブキーの列挙
- Hey, Scripting Guy! レジストリ キーのすべての値を取得する方法はありますか
- バイナリ データをレジストリに書き込む方法はありますか - Hey, Scripting Guy!
- 特定キーのサブキー名をテキストへ列挙
- Reg_Show_SubKey.vbs(.txt)
- Reg_Show_SubKey.vbs(.txt)
- 特定キーのサブキーの
Displayname
をテキストへ列挙 - 特定キーの値エントリをテキストへ列挙
- Reg_Show_Values.vbs(.txt)
- Reg_Show_Values.vbs(.txt)
- 入力キーの値エントリをテキストへ列挙(サブキー除く)
- Reg_Show_Values_Input.vbs(.txt)
- Reg_Show_Values_Input.vbs(.txt)
小ネタ
- 文字列を文字コード(符号)へ
- カンマ(,)区切りの文字コード(符号)を文字列へ
-
- Henkan_Code_to_Char.vbs(.txt)
- Henkan_Code_to_Char.vbs(.txt)
- レジストリ【REG_EXPAND_SZ】値を文字列に変換
-
- Henkan_REG_EXPAND_SZ.vbs(.txt)
- Henkan_REG_EXPAND_SZ.vbs(.txt)
- HTMLの文字参照
-
【&】【"】【<】【>】を変換。
最初の実行で空ファイル(Entity_Test1.txt)が開くので、そこにソース(複数行可)を貼付・保存後に再度スクリプトを実行。
数値文字参照(10進数)へ
文字実体参照へ
- OSバージョンなど
-
OSバージョン、Service Pack、物理メモリ量など
OperatingSystem.vbs(.txt)
Office のバージョン(2000/2002/2003のみ...不完全かも?)
MSOffice.vbs(.txt)
- ファイルのバージョンチェック
-
※ あまり確認してないのでいまいちかも。
バッチファイル(bat)用。コマンドラインで実行。標準出力
- FileVersion_for_Batch.vbs(.txt)
- FileVersion_for_Batch.vbs(.txt)
cscript //nologo FileVersion_for_Batch.vbs "パス\ファイル名"
テキストへ書き出し
- FileVersion.vbs(.txt)
- FileVersion.vbs(.txt)
FileVersion.vbs "パス\ファイル名"
右クリック「送る」メニューやD&Dでもおk。
- プラグインなどのバージョンチェック
-
旧バージョンのチェックはいまいち。仕様が変わる度にスクリプトの修正が必要かも。
- Check_Plugins.vbs(.txt)
- Check_Plugins.vbs(.txt)
参考リンク
めも
- 関連付け実行
-
エディタで編集中ファイルのスクリプト実行。ツールバーのボタンなどに登録しておくと便利。
- 秀丸エディタ
-
- コマンド一覧→ファイル系→関連付けで開く
- プログラム実行 -
wscript "%f"
- プログラム実行 -
cmd /k cscript "%f"
- EdTex(EdLeaf)
-
【外部ツール】の実行、または【ユーザーツール】に登録
- wscript
- パス -
C:\WINDOWS\system32\wscript.exe
- パラメータ -
"$f"
- パス -
- cscript
- パス -
C:\WINDOWS\system32\cscript.exe
- パラメータ -
"$f"
- 出力結果をリダイレクト
- パス -
- wscript
- Microsoft Script Editor
-
MIcrosoft Office に付属。
- CDからインストール
- Office ツール→HTMLソース編集(→Web スクリプト編集→Web デバッグ ツール)とか
- Excelメニューのツール→マクロ→Microsoft Script Editor
- CDを要求されたらCDを挿入してインストール
- Microsoft Script Editor を使用する
- Microsoft Script Editor について
- CDからインストール
ほなね