特殊文字と予約文字の扱いに注意
 特殊文字や予約文字もVBScriptコードに問題を引き起こす。特殊文字は,アルファベットでも数字でもない文字のことである。アスタリスク「*」,疑問符「?」,タブ,小なり記号「<」,大なり記号「>」などがその例だ。

 タブのような一部の特殊文字は印刷できない。ほかの特殊文字は特定の目的のために予約されている。どの文字が予約されているかは,コードが実行する処理に応じて異なる。例えば,VBScriptの正規表現にはメタキャラクタと呼ばれる数多くの予約文字がある。メタキャラクタの例を以下に示す。

$ ( ) * + . [ ] ? \ / ^ { } |

 XMLタグをVBScriptのコードの中で使う場合は,以下の文字に注意する必要がある。

& ' < > "


△ 図をクリックすると拡大されます
図12●正規表現で「$」を検索するコード
 大抵の場合は予約文字をコードの中で使っても問題ないが,適切なエスケープ文字を使ってエスケープする必要がある。例えば,ドル・マーク「$」が文字列中のどこにあるかを検索するために正規表現を使う場合,図12のように「$」を「\」でエスケープしなければならない。これは,「$」がVBScriptのRegExpオブジェクトに入力文字列の終点をマッチさせるよう指示するメタキャラクタだからである。

 XMLタグでは予約文字を適切なエスケープ・シーケンスで置き換えることができる。例えば,「<」は「<」で,「>」は「>」で置き換えられる。


△ 図をクリックすると拡大されます
図13●WQLが「'」を予約文字として扱うためにエラーが発生する例
 予約文字の意味がコンテキストによって異なる点が問題を引き起こすこともある。そのよい例が,マイクロソフトTechNetの連載コラム「Hey,Scripting Guy!」の記事の一つ「名前にアポストロフィが含まれているフォルダに接続する方法はありますか」で紹介されている。VBScriptからWQLクエリーを利用して「Ken Myer's Folder」という名前のフォルダの情報を取得しようとしても,うまくいかないというものだ(図13)。WQLクエリーでは,クエリー中で指定する文字列を「'」で囲むため,「'」を予約文字として扱うからである。

 「Hey,Scripting Guy!」の記事で説明されている通り,この問題を解決する一つの方法はアポストロフィをエスケープすることである。例えばWQLクエリーでは「'」の前に「\」を付加すればよい。「Hey,Scripting Guy!」の連載コラムには,ほかにも数多くの貴重なアドバイスが掲載されている。ぜひ読んでみてほしい。

 予約文字を見つける方法の一つがEscape関数とUnescape関数を使うことである。これらの関数はWindows Script 5.6のヘルプ・ファイルには掲載されていないが,MSDN(Microsoft Developer Network)のWebサイトにドキュメントがある。


△ 図をクリックすると拡大されます
図14●Escape関数を使用するコードの例

△ 図をクリックすると拡大されます
図15●図14のコードの実行結果
 MicrosoftはURLに含まれる特殊文字を表示するためにEscape/Unescape関数を設計した。しかし,Escape関数は特殊文字を含む可能性のあるVBScriptファイルのデバッグにも使用できる。Escape関数は文字列を文字単位で検査し,特殊文字をパーセント「%」とその文字の16進表現で置き換える。例えば,図14のコードを実行すると,図15のような結果が表示される。

 この結果は半角スペース(エスケープ・コード%20)と,感嘆符(同%21)が特殊文字であることを示す。Escape関数とUnescape関数の詳細については,Windows Scripting Solutions 2004年10月号に掲載した記事「Special Characters in VBScript」(InstantDoc ID 43751)で紹介している。

 最後に,VBScriptには予約文字のほかに「予約語」もあることを覚えておこう。予約語の一覧は,MicrosoftのWebページを参照してほしい。

 ここまで解説してきたように,VBScriptで記述したスクリプトが予期せず止まってしまったときは,コード中の変数,エラー処理構文,引用符,特殊文字と予約文字を調べ,問題の手掛かりを探すとよい。しかし,VBScriptはWMIやADSI(Active Directory Service Interfaces)などの多種多様なテクノロジとともに動作し,これらのテクノロジにもまたそれぞれの問題があることに注意する必要がある。従って,デバッグの旅では別の道を選ばなければならないこともある。旅支度の一環として,http://www.windowsitpro.com/に掲載した記事「Notable Problems with WMI and ADSI」(InstantDoc ID 46971)のほか,デバッグのTipsとツールについては表1をご覧いただきたい。


出典:日経Windowsプロ 2006年1月号
記事は執筆時の情報に基づいており、現在では異なる場合があります。