VBS
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-戻る
--[[Visual Basic]]
--[[スクリプティング]]
* 目次 [#v289a47b]
#contents
* 概要 [#ka786e28]
トピック情報を纏めています。
-言語構文やプログラミングの解説は、ここでは割愛します。
-下記のガイドや、「vbs|vbscript やりたいこと」でググるな...
豊富なサンプル、Q&Aが、ネット上に多数転がっています。
-ネット上に転がっていたスクリプトを引用する際は、~
権利関係に注意ください。(特に、まるまる引用するような場合)~
**VBScript と VBAの機能差 [#we00d8bf]
-VBScript は、 [[Excel VBA]] に似ています。
--Excel の モジュールシート に記述する感じで記述できます。
--ただ、構文や機能に、できることの違いが少しあります。
-[[リファレンス>#t9a0541e]]の「VBScript ユーザーズ ガイド...
--「VBScript の機能で VBA に含まれていない機能」
--「VBA の機能で VBScript に含まれていない機能」
>を参照してください。
**vbs と wsf [#b112b8c1]
VBScriptファイルは、vbs と wsf の 2種類あり、~
どちらも [[WSH]] のスクリプトを記述します。~
***.vbsファイル [#ic2f1837]
-*.vbs は VBScriptのみを記述。
***.wsfファイル [#ja94a2bf]
-*.wsf は xmlファイルで、 VBScriptのほか
--jscript
--参照する TypeLib
--参照する(取り込む)scriptファイル
>も記述することができます。
-wsfファイルは、ここでは解説しません、下を参照ください。
>[[Windows スクリプト ファイル (.wsf) を使用する:http://m...
* VBScriptの勘所 [#p946e3c9]
以下、個別に。
**set と let [#d8814c27]
VBScriptで値を代入するときは、let 文を使います。~
ただし、代入するものが object の場合は、 set 文を使います...
let str1 = "abcde"
str2 = "ABCDE"
set fso = CreateObject("Scripting.FileSystemObject")
普通は、let は 省略して、上の str2 の代入の様に書きます。~
上の関数の戻り値(function) の場合も、同じです。~
戻り値を返す関数の場合は、 関数名へ set を使って代入しま...
filename = "c:\temp\tempfile.txt"
set fso = CreateObject("Scripting.FileSystemObject")
set tmp1 = makeTempFile(filename)
tmp1.writeline "てすと"
tmp1.close
set tmp1 = nothing
function makeTempFile(fn)
dim f
set f = fso.OpenTextFile(fn, 2, True) ' 2=書き込み...
set makeTempFile = f
end function
**sub と function [#o479093e]
上の例の様に、sub ... end sub は、 値を返さない関数を定義...
値を返す場合は、 function を使います。~
function amari(a, b)
amari = ( a mod b )
end function
print amari( 20, 3 )
***Function の戻り値 [#q0ad8578]
-関数名 と同じ変数へ代入します。
-関数の戻り値の型は指定できません。~
(vbやvbaにある function funcname(arg1, arg2) as type」 の...
上の例にある「a mod b」 は、 a を b で割った剰余を求める...
***Functionの呼び出しは、 [#w9b2dedb]
-値を必要とする場所(代入の右辺、別の関数の引数、式の途中)...
-また、値を必要としない場所では、「関数名 引数,..」の様に...
-値を必要としない場所に ( ) をつけて記述する場合は、「cal...
***Subの呼び出しは、 [#s3f84f0b]
-「call 関数名(引数,..)」「関数名(引数,..)」「関数名 引数...
**変数の定義 [#nf5bc6bb]
***Dim と スコープ [#n6e2d3a8]
-VBScriptでは、dim文で変数を定義します。
-スコープ
--関数の外で定義すると、グローバル変数になります。
--class の中で定義することで、classのローカル変数にするこ...
--sub または function の中で定義した変数は、その関数の中...
***Option Explicit [#e88964e8]
-VBScriptは、dim文を省略することもできますが、~
変数のはじめに現れた場所に依存して、スコープが関数内また...
-変数名の誤字によるバグを回避したり、変数のスコープを管理...
VBScriptファイルの最初に「Option Explicit」を記述して、~
未定義の変数をエラーとして検出するようにしましょう。~
***Private [#g103b0db]
dim文のほかに、 定数を定義する const や、 class を作成し...
class外部から参照させないための private もあります。~
***変数の型 [#if71f326]
なお、VBScript では、変数の型がありません。
dim var1 as string
の様に 「as 型」 を書くとエラーになります。
VBScript では、
-全てが variant型で、代入した値や変数によって、型が変化し...
-また、数値型や文字列型とは自動で変換されます。
-後述の様に、object型とその他を明確に区別したい場合は、そ...
**Empty と Null と Nothing [#y78ba177]
***区別 [#m0388235]
Empty と Null と Nothingを区別するには、
isempty(変数名)
isnull(変数名)
isobject(変数名)
変数名 is nothing
を使います。
***Empty [#g9395f5b]
-変数の初期状態は empty です。
dim str1
if isempty(str1) then
print "str1 is empty"
end if
-なにか代入するとその値の型になります。
-型の名前は TypeName 関数で取得できます。
str1 = 123
if NOT isempty(str1) then
print "str1 is not empty. is " & typename(str1)
end if
***Empty, Nullを代入 [#s33865a6]
nullやemptyを代入することも出来ます。
str1 = null
str1 = empty
***オブジェクトを代入 [#c4293b4f]
-オブジェクトを代入すると、オブジェクト型になります。
set fso = CreateObject("Scripting.FileSystemObject")
if isobject(fso) then
print "is object"
end if
-nothing も オブジェクトの一種です。
set obj1 = nothing
if isobject(obj1) then
print "is object"
end if
if obj1 is nothing then
print "is nothing"
end if
***値とオブジェクト [#ie0f9506]
-関数を定義する際、戻り値がある場合は、戻り値の型が、~
値かオブジェクトかで、呼び出し元での 代入文が変わりますの...
どちらを返すのか決めて設計しましょう。
-関数への引数では、値とオブジェクトのどちらでも受け入れる...
isobject の真偽を確認して場合わけをします。~
下は、配列へ1つ追加する関数の例です。~
function add(dims, e)
Redim Preserve dims( ubound(dims) +1 )
if isobject(e) then
set dims( ubound(dims) ) = e
else
dims( ubound(dims) ) = e
end if
end function
dim arr
arr = array() ' 要素0個の配列
add arr, "123" ' 文字列を追加
add arr, fso ' オブジェクトを追加
-実際に、値とオブジェクトを混在する配列は使用しないかもし...
(扱いづらいですし)、こんな感じで両対応の関数を作ることが...
**数値と数字 [#j4947e96]
-数値と数字は、使用する場所によって、~
数値だったり文字列だったりします。
-できるだけ、意識して使い分けましょう。
***変換 [#q9195503]
-cint() は 16bit整数に変換
-clng() は 32bit整数に変換
-int() は intに切り捨て。
***例 [#x76392af]
-int2 には 45 (45.6を切捨て)が入ります。
-int3 には 46 (45.6を四捨五入)が入ります。
-int4 には 579、 str4 には "456123" が入ります。
str1 = "456"
int1 = cint(str1)
long1 = clng(str1)
int2 = int(int1/10)
int3 = cint(int1/10)
int4 = str1 + 123
str4 = str1 + "123"
**文字と文字列 [#r294f8b6]
***記述 [#ta97b31c]
-文字も文字列も " " で囲んで記述します。
str1 = "123456"
str2 = mid(str1,3,1)
str3 = """123""と""456"""
***文字列連結 [#t9183984]
「&」は文字列を連結する演算子です。~
数値や数字は文字列に変換して連結します。~
文字列であることが自明な場合は 「+」でも文字列連結が出来...
***Mid [#m77ce98e]
-mid は 文字列の一部を返します。 C# や perl の substring ...
-mid(文字列,開始位置,長さ) で、 開始位置は0が1文字目です...
「"」自身を文字列中では "" として記述します。
***文字コード [#t46874ba]
-VBScript 内部では、文字列はunicodeで表現されているので、...
-VBScript には、 文字列と文字の区別はありません。 長さ1の...
str2 = chr(9)
str3 = "これは\0で区切っています" & chr(0) & "続きも...
-chr() は 指定した文字コードが1文字の、長さ1の文字列を返...
-chr(0) は C++ では \0 で文字列の終了ですが、~VBScript は...
**If文 [#t28303d7]
***Then [#rcf0de90]
-if 文は、 then の右に 処理を1つ書くか、 then の下の行に...
--then の右に書いたときは、 end if は省略できます。
--then の下に書いたときは、 elseif か else で続けて、 end...
str4 = "これはどんな文字列かな"
if mid(str4,3,1) = "ど" then print "「ど」があるね"
if instr(str4,"文字") >= len(str4)/2 then
print "後半に ""文字"" がある"
end if
***式の評価順 [#w2b46def]
-VBScript の if文は、式を全て評価してから、if文全体の真偽...
set obj = func1()
if (NOT obj is nothing) and obj.flag = 2 then
' foo
end if
-この例の場合、~
obj が オブジェクトであっても、なくても、.flag を参照する...
obj が オブジェクトでなかった場合に、エラーになります。~
下の様に、if文をネストさせて、式の評価順に依存しないよう...
if NOT obj is nothing then
if obj.flag = 2 then
' foo
end if
end if
** 継続行 と コメント [#v8d18065]
VBScriptでは、 「 _」で次の行へ継続( _ の前にスペースあり...
str1 = "あいうえお"
str2 = mid (str1, _
instr(str1, "う") -1 ) ' "う" 以後の文字列...
instrは、文字列を含む位置を返します(1~、含まないなら0)。~
mid は 文字目が 0 なので、 instrの戻り値-1 の場所を指定す...
「含むならその文字以後、含まないなら、全体」という文字列...
**ファイル操作 [#jd476827]
ファイル操作は、Scripting.FileSystemObject を使用します。~
const ForReading = 1
set fso = CreateObject("Scripting.FileSystemObject")
set ts = fso.OpenTextFile("c:\temp\tempfile.txt", For...
print ts.readall
ts.close
set ts = nothing
set fso = nothing
-Scripting.FileSystemObject によるファイル操作は、テキス...
-文字コードは Windows既定, Unicode を指定できますが、 UTF...
-バイナリデータも、chr(10) の様に文字コードを指定した文字...
改行コードやBOM文字、EOF文字が処理されて、期待するバイナ...
** エラー処理 [#eb69591e]
***エラーの種類 [#r8a57296]
-エラーは、
--自分で値チェックなどで検出する論理エラーのほか、
--[[WSH]]その他が発生させるランタイムエラーがあり、
***エラー発生後の処理 [#v57189ef]
-ランタイムエラーが発生すると、[[WSH]]そのものがエラー終...
-COMなどのオブジェクト呼び出しの先でエラーが発生した場合...
-ランタイムエラーをVBScript内で処理するには、on error を...
--on error goto 0 (VBScriptをエラー終了する)
--on error resume next (無視して続行、Err変数にエラー番号...
ランタイムエラーを処理するには、on error resume next を使...
ランタイムエラー時に VBScriptが設定する Err変数 を参照し...
err1 = 0 ' エラー番号
on error resume next 'ランタイムエラーでVBScriptを終了...
Err.Clear 'Err変数をクリア
set obj1 = CreateObject("hogehoge.hogehoge1")
if Err.Number <> 0 then err1 = Err.Number 'ランタイム...
if err1 = 0 then
if obj1.hagehage("てすと") <> 0 then
err1 = 1 ' 論理エラー
end if
end if
if err1 <> 0 then
print "エラー発生 " & err1
end if
wscript.quit err1 ' エラー番号 を VBScriptの終了コ...
** debug方法 [#ba96bc99]
VBScriptのデバッグは、
-debug用print文を埋め込み
-Visual Studio などの開発ツール
-Debugger~
cscript.exe で実行するときに //x をオプションに指定して実...
debugger が起動して、ステップ実行、 変数の確認 などができ...
--Microsoft Script Debugger
--Microsoft Script Editor
**wscript.echo と wscript.stdout.writeline [#e8ac313b]
***wscript.echo [#vb800945]
wscript.echo は、引数の文字列を、標準出力(cscript時) また...
wscript.echo "これはスクリプト。"
for i = 0 to 9
wscript.echo "カウント " & i
next
wscript.quit 0
画面の場合は、 wscript.echo 1つにつき メッセージボックス...
***wscript.stdout.writeline [#e0c9b5ee]
wscript.stdout.writeline は 引数の文字列を、標準出力に出...
cscript.exe でのみ動きます。 wscript.exe ではエラーになり...
wscript.stdout.writeline "これはスクリプト。"
for i = 0 to 9
wscript.stdout.writeline "カウント " & i
next
wscript.quit 0
スクリプトで作り込む際には、下の様に、 print 関数を定義す...
sub print(v)
wscript.stdout.writeline v
end sub
*参考 [#acfcf81e]
-VBScript - Wikipedia~
https://ja.wikipedia.org/wiki/VBScript
**リファレンス [#t9a0541e]
***関数、ステートメント [#g37f5669]
-関数(mid, cint, len, split, など)、
-ステートメント(dim, if, for, call, function, など) など、
-言語のリファレンスは、以下を参照。
>[[VBScript ランゲージ リファレンス:http://msdn.microsoft...
***[[WSH]]オブジェクト [#xd04d1f3]
wscript, wshshell などの [[WSH]]のオブジェクトは、以下を...
-[[Windows Script Host の基礎:http://msdn.microsoft.com/j...
-[[Windows Script Host のオブジェクト モデル:http://msdn....
***ファイル操作 [#qc08fcb4]
Scripting.FileSystemObject などの ファイル操作関連のオブ...
-[[FileSystemObject オブジェクト:http://msdn.microsoft.co...
-[[FileSystemObject のプログラミング:http://msdn.microsof...
***ガイド、サンプル [#v0fa79b1]
-VBScriptのプログラミングは、下のユーザーズガイドから、必...
--[[VBScript ユーザーズ ガイド:http://msdn.microsoft.com/...
-MS の Script Center では、豊富なサンプル例が検索できます...
左の選択肢から、用途や種類を絞り込んで、スクリプトの具体...
--[[Script Center:http://gallery.technet.microsoft.com/sc...
**@IT [#t48a5ee2]
***Windows Server Insider 基礎解説 [#n3f2d36f]
http://www.atmarkit.co.jp/fwin2k/tutor/index/index.html
-チェック式WSH入門(全19回)
--第1回 WSHを始めよう~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh01/cformws...
--第2回 VBScriptの基本を押さえよう(その1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh02/cformws...
--第3回 VBScriptの基本を押さえよう(その2)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh03/cformws...
--第4回 関数を使いこなす(その1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh04/cformws...
--第5回 データ型について理解を深めよう~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh05/cformws...
--第6回 VBScriptの配列を極める~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh06/cformws...
--第7回 Subプロシージャでユーザー独自の処理を定義する~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh07/cformws...
--第8回 Functionプロシージャでユーザー独自の関数を定義す...
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh08/cformws...
--第9回 VBScriptのオブジェクトを使いこなす~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh09/cformws...
--第10回 WScriptオブジェクトを利用する(1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh10/cformws...
--第11回 WScriptオブジェクトを利用する(2)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh11/cformws...
--第12回 WshShellオブジェクトを利用する(1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh12/cformws...
--第13回 WshShellオブジェクトを利用する(2)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh13/cformws...
--第14回 WshShellオブジェクトを利用する(3)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh14/cformws...
--第15回 WshNetworkオブジェクトを利用する~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh15/cformws...
--第16回 FileSystemObjectオブジェクトを利用する(1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh16/cformws...
--第17回 FileSystemObjectオブジェクトを利用する(2)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh17/cformws...
--第18回 FileSystemObjectオブジェクトを利用する(3)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh18/cformws...
--第19回 TextStreamオブジェクトとDictionaryオブジェクト...
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh19/cformws...
***Windows Server Insider 運用 [#eee7e1cc]
http://www.atmarkit.co.jp/fwin2k/operation/indexpage/inde...
-Windows管理者のためのWindows Script Host入門
--第1回 WSHの内部構造~
http://www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_01...
--第2回 WSHスクリプト・コーディングの第1歩~
http://www.atmarkit.co.jp/fwin2k/operation/wsh02/wsh02_01...
--第3回 WScriptオブジェクトの詳細(1)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh03/wsh03_01...
--第4回 WScriptオブジェクトの詳細(2)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh04/wsh04_01...
--第5回 WshShellオブジェクトの詳細(1)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_01...
--第6回 WshShellオブジェクトの詳細(2)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh06/wsh06_01...
--第7回 WshShellオブジェクトの詳細(3)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh07/wsh07_01...
--第8回 WshNetworkオブジェクトの詳細~
http://www.atmarkit.co.jp/fwin2k/operation/wsh08/wsh08_01...
--第9回 WshControllerオブジェクトの詳細~
http://www.atmarkit.co.jp/fwin2k/operation/wsh09/wsh09_01...
--第10回 WSHスクリプトからのファイル操作(1)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh10/wsh10_01...
--第11回 WSHスクリプトからのファイル操作(2)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh11/wsh11_01...
----
Tags: [[:シェル]], [[:インフラストラクチャ]], [[:Windows]...
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-戻る
--[[Visual Basic]]
--[[スクリプティング]]
* 目次 [#v289a47b]
#contents
* 概要 [#ka786e28]
トピック情報を纏めています。
-言語構文やプログラミングの解説は、ここでは割愛します。
-下記のガイドや、「vbs|vbscript やりたいこと」でググるな...
豊富なサンプル、Q&Aが、ネット上に多数転がっています。
-ネット上に転がっていたスクリプトを引用する際は、~
権利関係に注意ください。(特に、まるまる引用するような場合)~
**VBScript と VBAの機能差 [#we00d8bf]
-VBScript は、 [[Excel VBA]] に似ています。
--Excel の モジュールシート に記述する感じで記述できます。
--ただ、構文や機能に、できることの違いが少しあります。
-[[リファレンス>#t9a0541e]]の「VBScript ユーザーズ ガイド...
--「VBScript の機能で VBA に含まれていない機能」
--「VBA の機能で VBScript に含まれていない機能」
>を参照してください。
**vbs と wsf [#b112b8c1]
VBScriptファイルは、vbs と wsf の 2種類あり、~
どちらも [[WSH]] のスクリプトを記述します。~
***.vbsファイル [#ic2f1837]
-*.vbs は VBScriptのみを記述。
***.wsfファイル [#ja94a2bf]
-*.wsf は xmlファイルで、 VBScriptのほか
--jscript
--参照する TypeLib
--参照する(取り込む)scriptファイル
>も記述することができます。
-wsfファイルは、ここでは解説しません、下を参照ください。
>[[Windows スクリプト ファイル (.wsf) を使用する:http://m...
* VBScriptの勘所 [#p946e3c9]
以下、個別に。
**set と let [#d8814c27]
VBScriptで値を代入するときは、let 文を使います。~
ただし、代入するものが object の場合は、 set 文を使います...
let str1 = "abcde"
str2 = "ABCDE"
set fso = CreateObject("Scripting.FileSystemObject")
普通は、let は 省略して、上の str2 の代入の様に書きます。~
上の関数の戻り値(function) の場合も、同じです。~
戻り値を返す関数の場合は、 関数名へ set を使って代入しま...
filename = "c:\temp\tempfile.txt"
set fso = CreateObject("Scripting.FileSystemObject")
set tmp1 = makeTempFile(filename)
tmp1.writeline "てすと"
tmp1.close
set tmp1 = nothing
function makeTempFile(fn)
dim f
set f = fso.OpenTextFile(fn, 2, True) ' 2=書き込み...
set makeTempFile = f
end function
**sub と function [#o479093e]
上の例の様に、sub ... end sub は、 値を返さない関数を定義...
値を返す場合は、 function を使います。~
function amari(a, b)
amari = ( a mod b )
end function
print amari( 20, 3 )
***Function の戻り値 [#q0ad8578]
-関数名 と同じ変数へ代入します。
-関数の戻り値の型は指定できません。~
(vbやvbaにある function funcname(arg1, arg2) as type」 の...
上の例にある「a mod b」 は、 a を b で割った剰余を求める...
***Functionの呼び出しは、 [#w9b2dedb]
-値を必要とする場所(代入の右辺、別の関数の引数、式の途中)...
-また、値を必要としない場所では、「関数名 引数,..」の様に...
-値を必要としない場所に ( ) をつけて記述する場合は、「cal...
***Subの呼び出しは、 [#s3f84f0b]
-「call 関数名(引数,..)」「関数名(引数,..)」「関数名 引数...
**変数の定義 [#nf5bc6bb]
***Dim と スコープ [#n6e2d3a8]
-VBScriptでは、dim文で変数を定義します。
-スコープ
--関数の外で定義すると、グローバル変数になります。
--class の中で定義することで、classのローカル変数にするこ...
--sub または function の中で定義した変数は、その関数の中...
***Option Explicit [#e88964e8]
-VBScriptは、dim文を省略することもできますが、~
変数のはじめに現れた場所に依存して、スコープが関数内また...
-変数名の誤字によるバグを回避したり、変数のスコープを管理...
VBScriptファイルの最初に「Option Explicit」を記述して、~
未定義の変数をエラーとして検出するようにしましょう。~
***Private [#g103b0db]
dim文のほかに、 定数を定義する const や、 class を作成し...
class外部から参照させないための private もあります。~
***変数の型 [#if71f326]
なお、VBScript では、変数の型がありません。
dim var1 as string
の様に 「as 型」 を書くとエラーになります。
VBScript では、
-全てが variant型で、代入した値や変数によって、型が変化し...
-また、数値型や文字列型とは自動で変換されます。
-後述の様に、object型とその他を明確に区別したい場合は、そ...
**Empty と Null と Nothing [#y78ba177]
***区別 [#m0388235]
Empty と Null と Nothingを区別するには、
isempty(変数名)
isnull(変数名)
isobject(変数名)
変数名 is nothing
を使います。
***Empty [#g9395f5b]
-変数の初期状態は empty です。
dim str1
if isempty(str1) then
print "str1 is empty"
end if
-なにか代入するとその値の型になります。
-型の名前は TypeName 関数で取得できます。
str1 = 123
if NOT isempty(str1) then
print "str1 is not empty. is " & typename(str1)
end if
***Empty, Nullを代入 [#s33865a6]
nullやemptyを代入することも出来ます。
str1 = null
str1 = empty
***オブジェクトを代入 [#c4293b4f]
-オブジェクトを代入すると、オブジェクト型になります。
set fso = CreateObject("Scripting.FileSystemObject")
if isobject(fso) then
print "is object"
end if
-nothing も オブジェクトの一種です。
set obj1 = nothing
if isobject(obj1) then
print "is object"
end if
if obj1 is nothing then
print "is nothing"
end if
***値とオブジェクト [#ie0f9506]
-関数を定義する際、戻り値がある場合は、戻り値の型が、~
値かオブジェクトかで、呼び出し元での 代入文が変わりますの...
どちらを返すのか決めて設計しましょう。
-関数への引数では、値とオブジェクトのどちらでも受け入れる...
isobject の真偽を確認して場合わけをします。~
下は、配列へ1つ追加する関数の例です。~
function add(dims, e)
Redim Preserve dims( ubound(dims) +1 )
if isobject(e) then
set dims( ubound(dims) ) = e
else
dims( ubound(dims) ) = e
end if
end function
dim arr
arr = array() ' 要素0個の配列
add arr, "123" ' 文字列を追加
add arr, fso ' オブジェクトを追加
-実際に、値とオブジェクトを混在する配列は使用しないかもし...
(扱いづらいですし)、こんな感じで両対応の関数を作ることが...
**数値と数字 [#j4947e96]
-数値と数字は、使用する場所によって、~
数値だったり文字列だったりします。
-できるだけ、意識して使い分けましょう。
***変換 [#q9195503]
-cint() は 16bit整数に変換
-clng() は 32bit整数に変換
-int() は intに切り捨て。
***例 [#x76392af]
-int2 には 45 (45.6を切捨て)が入ります。
-int3 には 46 (45.6を四捨五入)が入ります。
-int4 には 579、 str4 には "456123" が入ります。
str1 = "456"
int1 = cint(str1)
long1 = clng(str1)
int2 = int(int1/10)
int3 = cint(int1/10)
int4 = str1 + 123
str4 = str1 + "123"
**文字と文字列 [#r294f8b6]
***記述 [#ta97b31c]
-文字も文字列も " " で囲んで記述します。
str1 = "123456"
str2 = mid(str1,3,1)
str3 = """123""と""456"""
***文字列連結 [#t9183984]
「&」は文字列を連結する演算子です。~
数値や数字は文字列に変換して連結します。~
文字列であることが自明な場合は 「+」でも文字列連結が出来...
***Mid [#m77ce98e]
-mid は 文字列の一部を返します。 C# や perl の substring ...
-mid(文字列,開始位置,長さ) で、 開始位置は0が1文字目です...
「"」自身を文字列中では "" として記述します。
***文字コード [#t46874ba]
-VBScript 内部では、文字列はunicodeで表現されているので、...
-VBScript には、 文字列と文字の区別はありません。 長さ1の...
str2 = chr(9)
str3 = "これは\0で区切っています" & chr(0) & "続きも...
-chr() は 指定した文字コードが1文字の、長さ1の文字列を返...
-chr(0) は C++ では \0 で文字列の終了ですが、~VBScript は...
**If文 [#t28303d7]
***Then [#rcf0de90]
-if 文は、 then の右に 処理を1つ書くか、 then の下の行に...
--then の右に書いたときは、 end if は省略できます。
--then の下に書いたときは、 elseif か else で続けて、 end...
str4 = "これはどんな文字列かな"
if mid(str4,3,1) = "ど" then print "「ど」があるね"
if instr(str4,"文字") >= len(str4)/2 then
print "後半に ""文字"" がある"
end if
***式の評価順 [#w2b46def]
-VBScript の if文は、式を全て評価してから、if文全体の真偽...
set obj = func1()
if (NOT obj is nothing) and obj.flag = 2 then
' foo
end if
-この例の場合、~
obj が オブジェクトであっても、なくても、.flag を参照する...
obj が オブジェクトでなかった場合に、エラーになります。~
下の様に、if文をネストさせて、式の評価順に依存しないよう...
if NOT obj is nothing then
if obj.flag = 2 then
' foo
end if
end if
** 継続行 と コメント [#v8d18065]
VBScriptでは、 「 _」で次の行へ継続( _ の前にスペースあり...
str1 = "あいうえお"
str2 = mid (str1, _
instr(str1, "う") -1 ) ' "う" 以後の文字列...
instrは、文字列を含む位置を返します(1~、含まないなら0)。~
mid は 文字目が 0 なので、 instrの戻り値-1 の場所を指定す...
「含むならその文字以後、含まないなら、全体」という文字列...
**ファイル操作 [#jd476827]
ファイル操作は、Scripting.FileSystemObject を使用します。~
const ForReading = 1
set fso = CreateObject("Scripting.FileSystemObject")
set ts = fso.OpenTextFile("c:\temp\tempfile.txt", For...
print ts.readall
ts.close
set ts = nothing
set fso = nothing
-Scripting.FileSystemObject によるファイル操作は、テキス...
-文字コードは Windows既定, Unicode を指定できますが、 UTF...
-バイナリデータも、chr(10) の様に文字コードを指定した文字...
改行コードやBOM文字、EOF文字が処理されて、期待するバイナ...
** エラー処理 [#eb69591e]
***エラーの種類 [#r8a57296]
-エラーは、
--自分で値チェックなどで検出する論理エラーのほか、
--[[WSH]]その他が発生させるランタイムエラーがあり、
***エラー発生後の処理 [#v57189ef]
-ランタイムエラーが発生すると、[[WSH]]そのものがエラー終...
-COMなどのオブジェクト呼び出しの先でエラーが発生した場合...
-ランタイムエラーをVBScript内で処理するには、on error を...
--on error goto 0 (VBScriptをエラー終了する)
--on error resume next (無視して続行、Err変数にエラー番号...
ランタイムエラーを処理するには、on error resume next を使...
ランタイムエラー時に VBScriptが設定する Err変数 を参照し...
err1 = 0 ' エラー番号
on error resume next 'ランタイムエラーでVBScriptを終了...
Err.Clear 'Err変数をクリア
set obj1 = CreateObject("hogehoge.hogehoge1")
if Err.Number <> 0 then err1 = Err.Number 'ランタイム...
if err1 = 0 then
if obj1.hagehage("てすと") <> 0 then
err1 = 1 ' 論理エラー
end if
end if
if err1 <> 0 then
print "エラー発生 " & err1
end if
wscript.quit err1 ' エラー番号 を VBScriptの終了コ...
** debug方法 [#ba96bc99]
VBScriptのデバッグは、
-debug用print文を埋め込み
-Visual Studio などの開発ツール
-Debugger~
cscript.exe で実行するときに //x をオプションに指定して実...
debugger が起動して、ステップ実行、 変数の確認 などができ...
--Microsoft Script Debugger
--Microsoft Script Editor
**wscript.echo と wscript.stdout.writeline [#e8ac313b]
***wscript.echo [#vb800945]
wscript.echo は、引数の文字列を、標準出力(cscript時) また...
wscript.echo "これはスクリプト。"
for i = 0 to 9
wscript.echo "カウント " & i
next
wscript.quit 0
画面の場合は、 wscript.echo 1つにつき メッセージボックス...
***wscript.stdout.writeline [#e0c9b5ee]
wscript.stdout.writeline は 引数の文字列を、標準出力に出...
cscript.exe でのみ動きます。 wscript.exe ではエラーになり...
wscript.stdout.writeline "これはスクリプト。"
for i = 0 to 9
wscript.stdout.writeline "カウント " & i
next
wscript.quit 0
スクリプトで作り込む際には、下の様に、 print 関数を定義す...
sub print(v)
wscript.stdout.writeline v
end sub
*参考 [#acfcf81e]
-VBScript - Wikipedia~
https://ja.wikipedia.org/wiki/VBScript
**リファレンス [#t9a0541e]
***関数、ステートメント [#g37f5669]
-関数(mid, cint, len, split, など)、
-ステートメント(dim, if, for, call, function, など) など、
-言語のリファレンスは、以下を参照。
>[[VBScript ランゲージ リファレンス:http://msdn.microsoft...
***[[WSH]]オブジェクト [#xd04d1f3]
wscript, wshshell などの [[WSH]]のオブジェクトは、以下を...
-[[Windows Script Host の基礎:http://msdn.microsoft.com/j...
-[[Windows Script Host のオブジェクト モデル:http://msdn....
***ファイル操作 [#qc08fcb4]
Scripting.FileSystemObject などの ファイル操作関連のオブ...
-[[FileSystemObject オブジェクト:http://msdn.microsoft.co...
-[[FileSystemObject のプログラミング:http://msdn.microsof...
***ガイド、サンプル [#v0fa79b1]
-VBScriptのプログラミングは、下のユーザーズガイドから、必...
--[[VBScript ユーザーズ ガイド:http://msdn.microsoft.com/...
-MS の Script Center では、豊富なサンプル例が検索できます...
左の選択肢から、用途や種類を絞り込んで、スクリプトの具体...
--[[Script Center:http://gallery.technet.microsoft.com/sc...
**@IT [#t48a5ee2]
***Windows Server Insider 基礎解説 [#n3f2d36f]
http://www.atmarkit.co.jp/fwin2k/tutor/index/index.html
-チェック式WSH入門(全19回)
--第1回 WSHを始めよう~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh01/cformws...
--第2回 VBScriptの基本を押さえよう(その1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh02/cformws...
--第3回 VBScriptの基本を押さえよう(その2)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh03/cformws...
--第4回 関数を使いこなす(その1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh04/cformws...
--第5回 データ型について理解を深めよう~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh05/cformws...
--第6回 VBScriptの配列を極める~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh06/cformws...
--第7回 Subプロシージャでユーザー独自の処理を定義する~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh07/cformws...
--第8回 Functionプロシージャでユーザー独自の関数を定義す...
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh08/cformws...
--第9回 VBScriptのオブジェクトを使いこなす~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh09/cformws...
--第10回 WScriptオブジェクトを利用する(1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh10/cformws...
--第11回 WScriptオブジェクトを利用する(2)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh11/cformws...
--第12回 WshShellオブジェクトを利用する(1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh12/cformws...
--第13回 WshShellオブジェクトを利用する(2)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh13/cformws...
--第14回 WshShellオブジェクトを利用する(3)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh14/cformws...
--第15回 WshNetworkオブジェクトを利用する~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh15/cformws...
--第16回 FileSystemObjectオブジェクトを利用する(1)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh16/cformws...
--第17回 FileSystemObjectオブジェクトを利用する(2)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh17/cformws...
--第18回 FileSystemObjectオブジェクトを利用する(3)~
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh18/cformws...
--第19回 TextStreamオブジェクトとDictionaryオブジェクト...
http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh19/cformws...
***Windows Server Insider 運用 [#eee7e1cc]
http://www.atmarkit.co.jp/fwin2k/operation/indexpage/inde...
-Windows管理者のためのWindows Script Host入門
--第1回 WSHの内部構造~
http://www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_01...
--第2回 WSHスクリプト・コーディングの第1歩~
http://www.atmarkit.co.jp/fwin2k/operation/wsh02/wsh02_01...
--第3回 WScriptオブジェクトの詳細(1)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh03/wsh03_01...
--第4回 WScriptオブジェクトの詳細(2)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh04/wsh04_01...
--第5回 WshShellオブジェクトの詳細(1)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_01...
--第6回 WshShellオブジェクトの詳細(2)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh06/wsh06_01...
--第7回 WshShellオブジェクトの詳細(3)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh07/wsh07_01...
--第8回 WshNetworkオブジェクトの詳細~
http://www.atmarkit.co.jp/fwin2k/operation/wsh08/wsh08_01...
--第9回 WshControllerオブジェクトの詳細~
http://www.atmarkit.co.jp/fwin2k/operation/wsh09/wsh09_01...
--第10回 WSHスクリプトからのファイル操作(1)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh10/wsh10_01...
--第11回 WSHスクリプトからのファイル操作(2)~
http://www.atmarkit.co.jp/fwin2k/operation/wsh11/wsh11_01...
----
Tags: [[:シェル]], [[:インフラストラクチャ]], [[:Windows]...
ページ名: