2011年6月5日日曜日

VBScript カンペ

作業にVBSを使ったので、調べた内容をメモ。

Hello World
 WScript.Echo "Hello World"

文法
 行末にセミコロンは不要。
 コメントアウト
  シングルクォーテーション以降はコメント扱いになる。
  複数行コメント【/* コメント */】は対応していない。
 マルチステートメント
  コロン【:】で複数命令を1行で記述できる。
 コードの途中改行
  行末にアンダーバー【_】を入れると、次の行がコードの続きとして扱われる。
 変数名、関数名は大文字小文字の区別なし。
 オブジェクトへの参照を代入する。
  Set

文字リテラル
 文字列はダブルクォーテーションで囲む。
 数字をダブルクォーテーションで囲めば、文字列として扱われる。
 文字の連結はアンパサント【&】を使う。
  "hoge" & "hoge"

型宣言
 なし、基本Variant型。
 変数宣言と同時に初期化できない。
  【Dim strTes="Hello World"】はエラーになる。
   マルチステートメントを使う。【Dim strTes : strTes="Hello World"】

関数宣言
 サブプロシージャ
  Sub TestSub(arg1,arg2)
   strSample =arg1 & arg2
   WScript.Echo strSample
  End Sub
 関数プロシージャ
  Function TestFunc(arg1,arg2) 
   TestFunc=arg1 & arg2
  End Function
 サブプロシージャと関数プロシージャの違い
  サブプロシージャ戻り値なし。
  関数プロシージャ戻り値あり。

関数呼び出し
 サブプロシージャ
  TestSub "aaa","bbb"
   括弧をつけるとエラーになる。
  Result = TestFunc("aaa","bbb")
   括弧をつけないとエラーになる。

変数のスコープ
 プロシージャ内部で変数を宣言した場合、プロシージャ内でローカル変数となる。
 プロシージャ外部で変数を宣言した場合、スクリプトレベル変数と言うグローバル変数となる。
  プロシージャ内で参照可能なので、変数名が被らないように注意が必要。
  main()を宣言しスクリプトレベル変数を宣言しないようにする。
   Call main()
   Sub main()
    '処理を記述する。
   End Sub

条件分岐
 If文
  If (intMonth < 1 Or 12 < intMonth) Then
   WScript.Quit(0)
 ElseIf 条件式 Then
  実行文
  End If
 For文
  For i = 1 To 10 Step 1
   hoge=hoge & i
  Next
 GotoはSub又はFunctionの呼び出しで代用する。
 WScript.Quit(0)がEndに相当。

演算子
 論理積
  And
 論理和
  Or

ファイル入出力
 テキストファイルを1行ずつ読み込む。
  Dim strFilePath : strFilePath = "FileName.txt" '相対パス、絶対パスともに可。
  Dim objFileSystem : Set objFileSystem = CreateObject("Scripting.FileSystemObject")
  Dim objReadFile : Set objReadFile = objFileSystem.OpenTextFile(strFilePath)
  Do Until ( objFile.AtEndOfStream )
   WScript.Echo objReadFile.ReadLine
  Loop
  objFile.Close
 ファイル書き込み
  Dim strFilePath : strFilePath = "FileName.txt" '相対パス、絶対パスともに可。
  Dim objFileSystem : Set objFileSystem = CreateObject("Scripting.FileSystemObject")
  Dim objWriteFile : Set objWriteFile = objFileSystem.CreateTextFile(strFilePath, True)
  objWriteFile.WriteLine("hoge hoge")
  objWriteFile.Close

ファイルの実行
 DOSプロンプトの実行
  Dim objShell : Set objShell = CreateObject("WScript.Shell")
  objShell.Run "cmd.exe /c dir > DirResult.txt",0
   0 非表示、1 通常ウィンドウ、2 最小化、3 最大化
 プログラムの起動
  Dim objShell : Set objShell = CreateObject("WScript.Shell")
  objShell.Run "C:\Windows\System32\notepad.exe"

その他
 改行コード
  Chr(13) & Chr(10)
 文字列切り出し
  Mid(切り出し対象,何文字目から,何文字取り出す)
  一文字目は0でなく、1で表わされる。

雑テクニック
 YYYYMMDDHHmmの文字列作成
  Mid(Now(),1,4) & Mid(Now(),6,2) & Mid(Now(),9,2) & Mid(Now(),12,2) & Mid(Now(),15,2)
 先月の月を返す
  Month(DateSerial(Year(Date), Month(Date), 0))
 月の最終日付を返す
  Day(DateSerial(intYear, intMonth + 1, 1) - 1)
 キャンセルボタンを押したときの処理。
  intMonth = InputBox("月を入力してください",,Month(DateSerial(Year(Date), Month(Date), 0)))
  IF IsEmpty(intMonth) Then
   WScript.Quit(0)
  End If

課題
 On Error Resume Nextのエレガントな使い方。

参考
 http://msdn.microsoft.com/ja-jp/library/cc392489.aspx

0 件のコメント:

コメントを投稿