'################################################# スクリプト名 Ver1.0 2012/0/0 '日本語文字を扱う場合は、Shift JISコード(ANSI)にて作成してください。UTF-8等には対応していません。 '●使い方 'wscript スクリプト名.vbs 'cscript スクリプト名.vbs ' '################################################# 初期設定 Option Explicit '変数や定数の宣言を強制 '---+---+---+---+---+---+---+---+---+---+ 定数設定 Const SampleStr = "定数" 'Fileパス設定 Const File_Path = "DataDir\Sample.txt" '---+---+---+---+---+---+---+---+---+---+ 変数設定 '真偽値 Dim SampleBool SampleBool = False '数値 Dim SampleNum SampleNum = 0 '文字列 Dim SampleStr '受信データ文字列 SampleStr = "SAMPLE" '################################################# イニシャル処理 '---+---+---+---+---+---+---+---+---+---+ オブジェクト生成 Dim oWS,oFS Set oWS = WScript.CreateObject("WScript.Shell") Set oFS = WScript.CreateObject("Scripting.FileSystemObject") ' '---+---+---+---+---+---+---+---+---+---+ ファイル作成・オープン 'oFS.CreateTextFile "FileName"'ファイル作成 'Set oWriteFile = oFS.OpenTextFile("FileName", 8, True) '---+---+---+---+---+---+---+---+---+---+ Fileの有無チェック 'If oFS.FileExists(filePath)=False Then ' WScript.Echo "ファイルがみつかりません。(" & filePath & ")" ' WScript.Quit() 'End If '---+---+---+---+---+---+---+---+---+---+ 起動オプションの有無チェック 'If WScript.Arguments.Count <= 0 Then ' WScript.Echo "起動オプションが指定されていません。" ' WScript.Quit() 'End If ' '################################################# メイン処理 '################################################# 終了処理 '---+---+---+---+---+---+---+---+---+---+ 終了確認 MsgBox "スクリプトを終了します。", vbOKOnly, "WinTitle" '---+---+---+---+---+---+---+---+---+---+ ファイルクローズ 'oWriteFile.Close '読取データファイルのクローズ '---+---+---+---+---+---+---+---+---+---+オブジェクト解放 Set oWS = Nothing Set oFS = Nothing 'Set oWriteFile = Nothing WScript.Quit() 'スクリプト終了 ' '################################################# サブルーチン '[Call] xxSub(arglist) 'Subプロシージャ呼び出し ' '[Public [Default] | Private] Sub xxSub [(arglist)] 'arglist:[ByVal | ByRef] varname[( )] ' [Exit Sub] 'End Sub 'rtnCode = [Call] name(arglist) 'Functionプロシージャ呼び出し ' '[Public [Default] | Private] Function name [(arglist)] 'arglist:[ByVal | ByRef] varname[( )] ' [name = expression] '関数の戻り値を指定 ' [Exit Function] 'End Function '################################################# End Of File '*************************************************************************************************************************** 'これ以降は、構文の説明です '*************************************************************************************************************************** '記述には大文字・小文字の区別がありません。 '******* 定数 ******* 'vbCr Chr(13) キャリッジ リターン文字。 'VbCrLf Chr(13)、Chr(10) キャリッジ リターンとライン フィードの組み合わせ。 'vbFormFeed Chr(12) フォーム フィード文字。Microsoft Windows では使用できません。 'vbLf Chr(10) ライン フィード文字。 'vbNewLine Chr(13)、Chr(10) または Chr(10) プラットフォームで指定した改行文字。現在のプラットフォームに適切ないずれかを使用します。 'vbNullChar Chr(0) 値 0 を持つ文字列。 'vbNullString 値 0 を持つ文字列 長さ 0 の文字列 ("") とは異なります。外部プロシージャを呼び出す場合に使用します。 'vbTab Chr(9) タブ文字 (横)。 '------ 定数の宣言 ------ '(一度設定した定数は、途中で値を変えることができません) 'Const strParam = "定数" 'Const intParam = 999 ' '******* 変数 ******* '変数へ文字列代入 'filePath = "C:\Documents and Settings\Toshi\My Documents\Program\雛形.vbs" 'データ型はVariant型として定義され、代入された値によって自動的処理されます。 'ただし、意図しない計算結果になる場合は(数値を文字として処理されるなど)、型を指定できます。 'Dim filePath As Integer 'また、関数を使ってデータ型を変換することもできる。 'CInt()、CStr()、CDate()、CDbl()、CLng()、CByte()など '******* 配列 ******* 'Dim Names(9) '0〜9の10個の要素を持つ配列を宣言します。※60次元まで宣言可 'Dim Names() '動的配列を宣言します。 'ReDim Names(25) '動的配列の初期サイズに25を設定 '******* オブジェクト生成(インスタンス化) ******* 'Set WS = WScript.CreateObject("WScript.Shell") 'Set FS = WScript.CreateObject("Scripting.FileSystemObject") '******* WScriptオブジェクト ******* WSHが起動する際に自動的にインスタンス化される 'WScript.Quit() 'スクリプト終了(コマンドラインにエラーコードを返す際は、0または9などを設定。省略時は0) 'WScript.Arguments(0) 'コマンドラインのパラメータ(0〜) 'WScript.Arguments.Count 'コマンドラインのパラメータの個数 'WScript.Sleep 10000 'ウェイト10秒 'WScript.Echo "メッセージ" 'メッセージ表示 'WScript.StdIn.ReadLine() '標準入力から文字列を1行読み込む ※cscript.exeでのみ使用可 'WScript.StdIn.Read(5) '標準入力から文字列を5文字読み込む ※cscript.exeでのみ使用可 'WScript.StdOut.WriteLine "文字列" '標準出力に文字列を1行書き込む ※cscript.exeでのみ使用可 'WScript.StdOut.Write "文字列" '標準出力に文字列を書き込む(改行なし) ※cscript.exeでのみ使用可 'WScript.Interactive = false'スクリプトのモードを "バッチ" に設定。(WSH に対する入出力は無効になります。) ' '******* 表示&入力 ******* 'MsgBox "メッセージ"[, ボタン, "タイトル"] ' ボタン:vbOKOnly、vbOKCancel、vbAbortRetryIgnore、vbYesNoCancel、vbYesNo、vbRetryCancel 表示ボタンの種類 ' vbCritical、vbQuestion、vbExclamation、vbInformation メッセージアイコン指定 ' vbDefaultButton1(デフォルト)、vbDefaultButton2、vbDefaultButton3、vbDefaultButton4 標準にするボタン ' vbApplicationModal(デフォルト)、vbSystemModal(メッセージ ボックスに応答するまで中断) 'msg=MsgBox ("今からバックアップを行います。いいですか?", vbYesNo + vbDefaultButton2) ' 戻り値:1 vbOK、2 vbCancel、3 vbAbort、4 vbRetry、5 vbIgnore、6 vbYes、7 vbNo 'InputBox "メッセージ"[,"タイトル"][,初期値] 'inputData = InputBox("メッセージ"[,"タイトル", "初期値", X座標, Y座標]) 'oWS.Popup "メッセージ"[,表示秒数, "ウィンドウタイトル", ボタン] 'result = oWS.Popup("メッセージ"[,表示秒数, "ウィンドウタイトル", ボタン]) 'oWS.SendKeys "1{+}{ENTER}" '1 + Enter キーを自動入力 ' 特殊キー{BS}{BREAK}{CAPSLOCK}{DEL}{END}{ESC}{HOME}{INS}{NUMLOCK}{PRTSC}{SCROLLLOCK}{TAB} ' ファンクションキー{F1}{F2}・・・{F12} ' 記号キー{+} {^} {%} {~} {[} {]} {{} {}} {(} {)} ' カーソルキー{UP}{DOWN}{RIGHT}{LEFT}{PGUP}{PGDN} ' 組み合わせで使うShift=+,Ctrl=^,Alt=% ' '******* アプリケーション起動 ******* 'oWS.Run プログラム名, [intWindowStyle], [bWaitOnReturn] 'oWS.Run """プログラム名(フルパス)""" 'コマンド実行 'oWS.Run Chr(34) & FilePath & Chr(34) 'コマンド実行 'oWS.Exec "calc" 'コマンド ラインのアプリケーションのみ実行可です。ステータス情報やエラー情報の取得ができる。 'oWS.AppActivate "Calculator" '電卓をアクティブにする。※正常にアクティブにできた場合は、戻り値がTrue ' '******* 演算子 ******* 'True:真,False:偽 ブール '+,-,*,/,\,Mod,^,& 算術演算子 '=,<>,<,>,<=,>=,Is 比較演算子 'Not,And,Or,Xor,Eqv,Imp 論理演算子 ' '******* 制御 ******* '------ If文 ------ 'If condition Then statements [Else elsestatements ] ' 'If condition Then ' [statements] '[ElseIf condition-n Then ' [elseifstatements]] . . . '[Else ' [elsestatements]] 'End If ' '------- Select Case 文 ------ 'Select Case 条件式 ' Case 値1 ' 値1の処理 ' Case 値2 ' 値2の処理 ' Case Else ' それ以外の処理 'End Select ' '-------- For文 -------- 'For counter = start To end [Step step] ' [statements] ' [Exit For] ' [statements] 'Next ' 'For Each element In group ' [statements] ' [Exit For] ' [statements] 'Next [element] ' '------- Do Loop 文 -------- 'Do [{While | Until} condition] ' [statements] ' [Exit Do] ' [statements] 'Loop ' 'Do ' [statements] ' [Exit Do] ' [statements] 'Loop [{While | Until} condition] ' '-------- While文 -------- 'While condition ' Version [statements] 'Wend ' '-------- While文 --------- 'With object ' statements 'End With ' '**************** ファイル操作 ****************** 'Set oTxtFile = FS.OpenTextFile(filePath, iomode, create) 'txtファイルを読取モードでオープン(iomode[1:読取、2:書込、8:追記], create[True:作成、False:しない]) 'oTxtFile.Close 'txtファイルのクローズ 'oFS.CreateTextFile "ファイルパス" 'ファイル作成 'oFS.DeleteFile "ファイルパス" 'ファイル削除 'oFS.CopyFile "コピー元", "コピー先" 'ファイルコピー 'oFS.MoveFile "移動元", "移動先" 'ファイル移動 ' 'oFS.CreateFolder "フォルダパス" 'フォルダ作成 'oFS.DeleteFolder "フォルダパス" 'フォルダ削除 'oFS.CopyFolder "コピー元","コピー先" 'フォルダコピー 'oFS.MoveFolder "移動元","移動先" 'フォルダ移動 ' 'If oFs.FileExists("ファイルパス")=True Then 'ファイル有無確認 'If oFs.FolderExists("フォルダパス")=True Then 'フォルダ有無確認 ' 'オブジェクト名.Write "文字列" '書き込み(改行なし) 'オブジェクト名.WriteLine "文字列" '1行書き込み(改行あり) ' '-------- TXTファイルの書き換えサンプル ---------------- 'Dim oTxtFile, oTmpFile 'Dim filePath,tmpPath 'filePath = "sample.txt" 'tmpPath = oFS.GetTempName 'ランダムなファイル名取得 'Set oTxtFile = oFS.OpenTextFile(filePath,1,False) 'txtファイルを読取モードでオープン 'Set oTmpFile = oFS.OpenTextFile(tmpPath,2,True) 'txtファイルを書込モードでオープン 'Do Until oTxtFile.AtEndOfStream ' dataLine = oTxtFile.ReadLine '1行読み込み ' If dataLine="abc" Then ' oTmpFile.WriteLine "def" '1行書き込み ' Else ' oTmpFile.WriteLine dataLine '1行書き込み ' End If 'Loop 'oTxtFile.Close 'txtファイルのクローズ 'oTmpFile.Close 'txtファイルのクローズ 'oFS.DeleteFile filePath, True 'oFS.MoveFile tmpPath, filePath 'oTxtFile = Nothing 'oTmpFile = Nothing ' '-------- zipファイル解凍 ---------------- 'Dim oSA 'Dim exFolder,zipFile 'exFolder = "出力フォルダのパス" 'zipFile = "zipファイルのパス" 'If oFs.FolderExists(exFolder)=True Then ' Set oSA = CreateObject("Shell.Application") ' With oSA ' .NameSpace(exFolder).CopyHere .NameSpace(zipFile).Items ' End With 'Else ' WScript.Echo "zipファイルの解凍先フォルダがみつかりません。(" & exFolder & ")" 'End If 'oSA = Nothing ' '-------- レジストリ操作 ---------------- 'WS.RegRead("HKEY_CURRENT_USER\Software\Test\") 'レジストリから値を取得する。 'WS.RegWrite "HKCU\Software\Test\", 1, "REG_DWORD" '値と型名を指定します。(REG_SZは文字列、REG_DWORDは数値、REG_BINARYはバイナリ、REG_MULTI_SZは配列、REG_EXPAND_SZは展開可能な文字列を表します。) 'WS.RegDelete "HKCU\Software\Test\" 'レジストリから値を削除する。 ' '-------- エクセル操作 ---------------- 'エクセルオブジェクトを作成して、エクセルVBAのメソッドやプロパティが使えます。 'Dim objExcel 'Set objExcel = CreateObject("Excel.Application") 'エクセルオブジェクトを作成します 'objExcel.Quit 'エクセルを終了 'Set objExcel = Nothing 'オブジェクト開放 'objExcel.Visible = True 'エクセル画面を表示(デフォルト:非表示) 'objExcel.Workbooks.Open "c:\book.xls" 'ワークブックを開く 'objExcel.Workbooks.Add 'ワークブック新規作成 'bjExcel.Workbooks(1).Close 'ワークブックを閉じる 'objExcel.Workbooks(1).Save 'ワークブックの保存 'objExcel.Workbooks(1).SaveAs ("c:\book.xls") '名前を付けて保存 'Set objSelection = objExcel.Workbooks(1).Worksheets(1).Range("B2:D10") '範囲を選択。※Selectionは使えないため選択した範囲はオブジェクトとして保存します。 'objExcel.DisplayAlerts = False '各種の確認ダイアログを非表示 ' '-------- Access操作 ---------------- 'Dim objAccess 'Set objAccess = CreateObject("Access.Application") 'Accessオブジェクトを作成します ' '-------- WMI ---------------- 'システムを管理するためのインターフェース '●代表的なWMIクラス 'Win32_Service サービス情報(サービス名、ステータスなど) 'Win32_Process プロセス情報(プロセス名、使用メモリ容量など) 'Win32_LogicalDisk ディスク情報(ディスク容量、空き容量など) 'Win32_Processor CPU情報(CPU使用率など) 'Win32_OperatingSystem OS情報(プロダクト名、プロダクトタイプなど) 'Win32_NTEventLogFile イベントログ情報(イベント内容など) 'Win32_LogicalMemoryConfiguration メモリ情報(物理メモリ容量など) ' '例)プロセスの表示をするサンプルソース 'Set Process = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_Process") 'For Each P In Process ' str = str & P.Description & ":" & CStr(P.ProcessId) & vbCrLf 'Next 'WScript.Echo str '------- プロセス終了 ------- 'Sub ProcKillSub(ProcessName) ' Dim oClassSet, oClass ' Set oClassSet = WScript.CreateObject("WbemScripting.SWbemLocator")_ ' .ConnectServer.ExecQuery("Select * From Win32_Process Where Caption='" & ProcessName & "'") ' For Each oClass In oClassSet ' oClass.Terminate ' Next ' Set oClassSet = Nothing ' Set oClass = Nothing 'End Sub ' '-------- ADO ---------------- 'ADO(ActiveX Data Objects)とは、WSHで利用できるデータベースへのアクセス部品のことです。 'Access、SQLServer、Oracle、Excelへのデータ操作が可能になります。 'ただし、CSVテキストドライバとしての仕様上、255を超える項目数、255を超えるサイズはNG '例) 'オブジェクト生成 'Set objCon = Server.CreateObject("ADO.Connection") 'ADO コネクション 'Set objRS = Server.CreateObject("ADO.Recordset") 'ADO レコードセット ' ' データベース接続情報 'objCon.ConnectionString = "Data Source=データソース名" ' データ取得 'objRS.Open "select * from テーブル名", objCon 'objRS.Close 'objCon.Close ' ' オブジェクト解放 'Set objRS = Nothing 'Set objCon = Nothing ' '------- エクセルファイルでのデータベース操作 ------- 'Dim objADO 'Set objADO = CreateObject("ADODB.Connection") 'ADOオブジェクトを作成します 'ファイルオープン 'objADO.Open "Driver={Microsoft Excel Driver (*.xls)}; " & "DBQ=c:\kakaku.xls;" & "ReadOnly=0" '0:更新可、1:リードオンリ 'レコード追加 'objADO.Execute "INSERT INTO [Sheet1$] (日付, 店舗コード) VALUES ('2003/11/30', 'T5130')" 'レコード更新 'objADO.Execute "UPDATE [Sheet1$] SET データ番号 = '100', 担当者 = '00M5365', 会員番号 = '5144M200210724' WHERE 店舗コード='Z5130'" 'U_TBL範囲設定 'データを抽出 'Set objRS = objADO.Execute("select * from [Sheet1$] where 店舗コード='T5144'") 'SQLを実行し、店舗コードがT5144のデータを抽出します 'Do Until objRS.Eof = True ' WScript.echo "店舗コード:" & objRS("店舗コード") & " 価格:" & objRS("価格") 'フィールド値の表示 ' objRS.MoveNext 'カーソルを次の行へ 'Loop ' 'SELECT * FROM U_TBL WHERE 顧客番号 >= 100 '設定した範囲「U_TBL」データを取得するSELECTステートメントの例 ' '------ CSV(テキストデータ)でのデータベース操作 ------- 'objADO.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & "DBQ=c:\sample;" & "ReadOnly=0" 'DBQにはフォルダを指定する。 'objADO.Execute "INSERT INTO kakaku.csv (日付, 店舗コード) VALUES ('2003/11/30', 'T5130')" 'レコード追加 'Set objRS = objCon.Execute("select * from kakaku.csv where 店舗コード='T5144'") 'データ抽出 '※CSVファイルの更新は、レコード追加のみ可 ' '**************** 起動オプション ****************** 'wscript、cscriptでのオプション '//B バッチモードでスクリプトを実行します。ユーザープロンプトおよびスクリプト エラーをコマンド ライン表示しません。 '//D アクティブデバッグを使用可能にします。 '//E:engine 指定したスクリプトエンジンでスクリプトを実行します。 '//H:CScript 既定のスクリプトホストを CScript.exe に変更します。 '//H:WScript 既定のスクリプトホストを WScript.exe に変更します。(既定値) '//I 対話モードでスクリプトを実行します。(既定値)バッチ モードとは逆に、ユーザー プロンプトおよびスクリプト エラーの表示を有効にします。 '//Job:xxxx 指定した JobID を .wsf ファイルから実行します。 '//logo バナーを表示します。nologo の逆の設定です。(既定値) '//nologo 実行時にバナーを表示しません。 '//S このユーザーに対して、現在のコマンドラインオプションを保存します。 '/T:nn スクリプトの実行を継続できる時間の上限 (タイムアウト) を設定します。既定では、スクリプトは制限なしで実行されます。このパラメータを設定すると、スクリプトが長時間にわたって実行されるのを防止できます。 '//U コマンド ライン出力を Unicode にします。CScript には、Unicode と ANSI を自動的に判別する機能はありません。既定の設定では、ANSI が使用されます。 '//X スクリプトをデバッガで実行します。 '//? オプションの説明を表示します。 ' '------- エラー処理使用例 ------- '注意:スクリプトのデバッグを行う際は、エラーの特定が難しくなるため ' デバッグ後にエラー処理を追加してください。 'On Error Resume Next 'エラー時も処理続行 'ファイル操作等のエラー回避したい処理 'ErrSub() 'エラー処理ルーチン呼び出し 'On Error Goto 0 'エラー処理終了 '------- エラー処理ルーチン ------- 'Sub ErrSub() ' If Err.Number <> 0 Then ' Select Case Err.Number ' Case 53 ' WScript.Echo "ファイルが見つかりません。" ' Case 54 ' WScript.Echo "ファイルのモードが不正です。" ' Case 55 ' WScript.Echo "ファイルは既に開かれています。" ' Case 58 ' WScript.Echo "すでにファイルが存在します。" ' Case Else ' WScript.Echo "予期しないエラーが発生しました。" & vbCrLf & _ ' "エラー番号:" & Err.Number & vbCrLf & _ ' "エラー詳細:" & Err.Description ' End Select ' End If 'End Sub '******* End of file *******