どっとPCに連載した記事のまとめです。
マニュアルは、ここの「Windows Script 5.6 日本語版」を参照してください。
Sample1.vbs:たった一行でもプログラムです。
msgbox(“ハローワールド”)
Sample2.vbs:変数というものにより、さまざまな値に対応できます。
namae = inputbox("お名前は?") msgbox(namae)
Sample3.vbs:変数が左辺と右辺に同じものがきています。&は文字列の連結です。
namae = inputbox("お名前は?") namae = namae & "さん、こんちは" msgbox(namae)
Sample4.vbs:IFを使うことで、知性があるように見えます。
suuji = inputbox("数字をいれて") if suuji > 5 then kotae = "5より大きい" else kotae = "5と同じか小さい" msgbox ( suuji & "は" & kotae )
Sample5.vbs:文字列の比較は同じか、同じでない、だけです。
moji = inputbox("TAROUといれて") if moji = "TAROU" then kotae = "そうです" else kotae =? moji & "だったよ" msgbox ( kotae )
Sample6.vbs:省略値をセットして、IFで次々に比べます。
suuji = inputbox("数字をいれて") kotae = "5以上" if suuji = 1 then kotae = "1です" if suuji = 2 then kotae = "2です" if suuji = 3 then kotae = "3です" if suuji = 4 then kotae = "4です" msgbox ( suuji & "は" & kotae )
Sample7.vbs:同じ条件で場合わけする時は、Select-Caseを使うと便利です。
suuji = inputbox("数字をいれて") Select Case suuji ? case 1 ? ? kotae = "1です" ? Case 2 ? ? kotae = "2です" ? Case 3 ? ? kotae = "3です" ? Case 4 ? ? kotae = "4です" ? Case Else ? ? kotae = "5以上" End Select? ? msgbox ( suuji & "は" & kotae )
Sample8.vbs:条件がふたつある場合は各々の条件で同じ条件を調べます。
hot = msgbox("お湯の蛇口は開いていますか?",vbYesNo) cold = msgbox("お水の蛇口は開いていますか?",vbYesNo) if hot = vbYes then ? if cold = vbYes then ? ? msgbox ("暖かいお湯がでています") ? else ? ? msgbox ("熱いお湯がでています") ? end if else ? if cold = vbYes then ? ? msgbox ("冷たい水がでています") ? else ? ? msgbox ("水は出ていません") ? end if end if
Sample9.vbs:水が出ていないか、といった特定の条件だけを調べたい場合は、ひとつのif文中でAND,ORで調べます。
hot = msgbox("お湯の蛇口は開いていますか?",vbYesNo) cold = msgbox("お水の蛇口は開いていますか?",vbYesNo) if (hot = vbNo) AND (cold = vbNo) then ? msgbox ("水は出ていません") else ? msgbox ("湯か水がでています") end if
Sample10.vbs:sample8の逆、つまり水かお湯がでている時の書き方。
hot = msgbox("お湯の蛇口は開いていますか?",vbYesNo) cold = msgbox("お水の蛇口は開いていますか?",vbYesNo) if (hot = vbYes) OR (cold = vbYes) then ? msgbox ("湯か水がでています") '-- シャドウ開始 else ? msgbox ("水は出ていません") '-- シャドウおわり end if
Sample11.vbs:指定回数繰り返す for-nextの例
kachi = 0 aiko? = 0 kaisu = 1000000 Randomize for i=1 to kaisu ? a=Int(rnd*3)+1 ? b=Int(rnd*3)+1 ? if a=b then aiko = aiko + 1 ? if (a=1) AND (b=2) then kachi = kachi + 1 ? if (a=2) AND (b=3) then kachi = kachi + 1 ? if (a=3) AND (b=1) then kachi = kachi + 1 next msgbox "Aさんは" & kaisu & "回じゃんけんして," & kachi & "回勝ち," & aiko & "回あいこで," & kaisu-kachi-aiko & "回負けました。"
Sample12.vbs:AかBが先に10回勝ったら終わり Do while-Loopの例
a_kachi = 0 b_kachi = 0 kaisu = 0 senshu = 10 Randomize Do while (a_kachi < senshu) and (b_kachi < senshu) ? a=Int(rnd*3)+1 ? b=Int(rnd*3)+1 ? kaisu= kaisu+1 ? if (a=1) AND (b=2) then a_kachi = a_kachi + 1 ? if (a=2) AND (b=3) then a_kachi = a_kachi + 1 ? if (a=3) AND (b=1) then a_kachi = a_kachi + 1 ? if (b=1) AND (a=2) then b_kachi = b_kachi + 1 ? if (b=2) AND (a=3) then b_kachi = b_kachi + 1 ? if (b=3) AND (a=1) then b_kachi = b_kachi + 1 ' msgbox "速報:" & kaisu & "回じゃんけんをし、Aは" & a_kachi & "回勝ち、Bは" & b_kachi & "回勝ってます" loop msgbox kaisu & "回じゃんけんして" & "Aさんは" & a_kachi _ & "回勝ち、Bさんは" & b_kachi & "回勝ちました。"
Sample13.vbs:Sample12を論理ごとにサブルーチンにしたFunctionの例
a_kachi = 0 b_kachi = 0 kaisu = 0 senshu = 10 Randomize Do while (a_kachi < senshu) and (b_kachi < senshu) ? ' --- janken関数でa,bのテをきめる ? a=janken() ? b=janken() ? ' --- hantei関数は勝ったほうを教えてくれる ? select case hantei(a,b) ? ? case "a" a_kachi = a_kachi + 1 ? ? case "b" b_kachi = b_kachi + 1 ? ? case else ? end select ? kaisu= kaisu+1 loop msgbox kaisu & "回じゃんけんして" & "Aさんは" & a_kachi _ & "回勝ち、Bさんは" & b_kachi & "回勝ちました。" ' ----- ジャンケンの結果を出すサブルーチン ------ function janken ? janken = Int(rnd*3)+1 end function ' ----- ジャンケンの結果判定サブルーチン ------ function hantei(a_te,b_te) ? if (a_te=1) AND (b_te=2) then hantei = "a" ? if (a_te=2) AND (b_te=3) then hantei = "a" ? if (a_te=3) AND (b_te=1) then hantei = "a" ? if (b_te=1) AND (a_te=2) then hantei = "b" ? if (b_te=2) AND (a_te=3) then hantei = "b" ? if (b_te=3) AND (a_te=1) then hantei = "b" end function
Sample14.vbs:ファイルシステム・オブジェクトの力で移動
SourceDir = "C:ホームページHTML" DestDir = "C:ホームページimages" On Error Resume Next Set fso = CreateObject("Scripting.FileSystemObject") rc = fso.MoveFile( SourceDir & "*.jpg", DestDir) rc = fso.MoveFile( SourceDir & "*.gif", DestDir) rc = fso.MoveFile( SourceDir & "*.bmp", DestDir) set fso = Nothing msgbox "処理終了"
Sample15.vbs:特定のファイル名の名前変更(正規表現・ファイルシステムオブジェクトの利用)
TargetDir = "C:testfolder" TargetPattern = "(.txt)$" Set fso = CreateObject("Scripting.FileSystemObject") Set RegEx = CreateObject("VBScript.RegExp") RegEx.Pattern = TargetPattern? '検索パターン RegEx.IgnoreCase = True? ?? '大文字と小文字を区別しないように設定 for each afile in fso.GetFolder( TargetDir ).Files ? if RegEx.Test( afile.name ) then ? ? newname = replace( afile.name, ".", "_old.") ? ? fso.MoveFile TargetDir & afile.name , TargetDir & newname ? end if next set fso = Nothing set RegEx = Nothing msgbox "処理終了"
Sample16.vbs:特定のファイル名で指定日より古いファイルの名前変更(正規表現・ファイルシステムオブジェクトの利用)
TargetDir = "C:testfolder" DueDate = "2002/07/30" TargetPattern = "(.txt)$" Set fso = CreateObject("Scripting.FileSystemObject") Set RegEx = CreateObject("VBScript.RegExp") RegEx.Pattern = TargetPattern? '検索パターン RegEx.IgnoreCase = True? ?? '大文字と小文字を区別しないように設定 for each afile in fso.GetFolder( TargetDir ).Files ? if afile.datelastmodified < datevalue( DueDate ) _ ? '新機能 ? AND RegEx.Test( afile.name ) then ? ? newname = replace( afile.name, ".", "_old.") ? ? fso.MoveFile TargetDir & afile.name , TargetDir & newname ? end if next set fso = Nothing set RegEx = Nothing msgbox "処理終了"
Sample17.vbs:再帰プログラム(ご先祖様の合計)
msgbox senzo(3) & "人" ' ここに世代数 Function senzo(n) ? if n=1 then ? ? senzo = 2 ? else ? ? senzo = 2^n + senzo(n-1) ? end if End Function
Sample18.vbs:再帰プログラム(サブフォルダを探索し、ファイルサイズの合計をする)
TargetFolder = "C:windows"? ' サイズを計算するフォルダを指定 Set fso = CreateObject("Scripting.FileSystemObject") Set oFolder = fso.GetFolder( TargetFolder ) allbyte = TraversFolder( oFolder ) msgbox formatnumber(allbyte/ (1024*1024) ,4) & "メガバイト" set fso = Nothing Function TraversFolder(ofolder) ? FolderSize = 0 ? For Each Afolder In ofolder.SubFolders ? ? FolderSize =FolderSize + TraversFolder( Afolder ) ? Next ? For each Afile in ofolder.Files ? ? FolderSize = FolderSize + afile.size ? next ? TraversFolder = FolderSize End Function
Sample19.vbs:フォルダー検索プログラム(再帰プログラムとファイルのI/O技の組み合わせ)
Do while SearchChar = "" ? SearchChar =InputBox("探したい言葉を指定してください。") Loop Do while TargetFolder = "" ? TargetFolder = InputBox("探すフォルダーを指定してください。でおわること。") Loop Set fso = CreateObject("Scripting.FileSystemObject") Set oFolder = fso.GetFolder( TargetFolder ) filelist = TraversFolder( oFolder, SearchChar ) if filelist = "" then ? filelist = SearchChar & "は見つかりません。" end if msgbox filelist set fso = Nothing 'フォルダーの探索 Function TraversFolder(ofolder, SearchChar) ? FileList = "" ? '今のフォルダー内を探索 ? For each Afile in ofolder.Files ? ? if CheckChar( afile.path, SearchChar) then ? ?? ?FileList = FileList & afile.path & vbCrLf ? ? end if ? next ? 'サブフォルダーを再帰処理 ? For Each Afolder In ofolder.SubFolders ? ? FileList =? FileList & TraversFolder( Afolder, SearchChar ) ? Next ? TraversFolder = FileList End Function 'ひとつのファイルの中に文字列があるか調べる function CheckChar( file, SearchChar) ? alltext = ReadAllFile( file ) ? if Instr(1, alltext, SearchChar, 1) >= 1 then ? ? CheckChar = True ? else ? ? CheckChar = False ? end if End Function 'ひとつのファイルを読み取る function ReadAllFile( file ) ? Set fso = CreateObject("Scripting.FileSystemObject") ? Set fio = fso.OpenTextFile( file, 1) ? ReadAllfile = fio.readall ? ' msgbox ReadAllfile ? fio.Close ? set fso = Nothing End Function
Sample20.vbs:フォルダー検索プログラム(結果をIEに書き出す。プログラム変更の例です)
SearchChar =InputBox("探したい言葉を指定してください。",,"test") TargetFolder = InputBox("探すフォルダーを指定してください。でおわること。",,"D:temp") Set fso = CreateObject("Scripting.FileSystemObject") Set oFolder = fso.GetFolder( TargetFolder ) filelist = TraversFolder( oFolder, SearchChar ) dummy = ShowIE( SearchChar, filelist) set fso = Nothing 'フォルダーの探索 Function TraversFolder(ofolder, SearchChar) ? FileList = "" ? '今のフォルダー内を探索 ? For each Afile in ofolder.Files ? ? if CheckChar( afile.path, SearchChar) then ? ?? ?FileList = FileList & afile.path & " " ? ? end if ? next ? 'サブフォルダーを再帰処理 ? For Each Afolder In ofolder.SubFolders ? ? FileList =? FileList & TraversFolder( Afolder, SearchChar ) ? Next ? TraversFolder = FileList End Function 'ひとつのファイルの中に文字列があるか調べる function CheckChar( file, SearchChar) ? alltext = ReadAllFile( file ) ? if Instr(1, alltext, SearchChar, 1) >= 1 then ? ? CheckChar = True ? else ? ? CheckChar = False ? end if End Function 'ひとつのファイルを読み取る function ReadAllFile( file ) ? Set fso = CreateObject("Scripting.FileSystemObject") ? Set fio = fso.OpenTextFile( file, 1) ? ReadAllfile = fio.readall ? ' msgbox ReadAllfile ? fio.Close ? set fso = Nothing End Function 'ファイルをIE上に書き出す Function ShowIE( Word, Text ) ? set objIE = CreateObject("InternetExplorer.Application") ? objIE.navigate("about:blank") ? objIE.visible = True ? objIE.document.open ? objIE.document.write( "" ) ? objIE.document.write( "" & Word & "の含まれるファイル
" ) ? objIE.document.write( Text ) ? objIE.document.write( "" ) ? objIE.document.close End Function