どっと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






