Batch file to VBScript file (3) at 1998.Nov.07 3.3 入力  バッチで入力と言うとChoiceコマンド(って昔はこんなコマンドDOSに付属してなかった  のだが、それはそれ)。  さて。DOS窓でchoice/?ってやると、ん〜むむ。結構機能豊富でやんの。で:  a. Yes/Noとかいった定形の応答で済むような場合   要するに前で書いたMessageBoxで済むような場合ということですが: Dim ans ans = MsgBox("よかけ?", vbYesNo + vbDefaultButton2, "答えんかいわれ") If ans <> vbYes Then Call MsgBox("なんやと、こら",,"") End If   という具合に(…サンプルのガラが悪いな)なります。  b. (Choiceのように)一定時間だけ待ちたい場合 Dim X, WSh Set WSh = Wscript.CreateObject("Wscript.Shell") X = WSh.Popup("どーしまっか?",3,"3秒以内に決定せよ!",_ vbAbortRetryIgnore + vbQuestion) Select Case X Case vbAbort Call MsgBox("そんな……",,"") Case vbRetry Call MsgBox("ええっ",,"") Case vbIgnore Case Else ' -1 Call MsgBox("じっかん切れっと", vbCritical, "やーい") End Select   ってな風に(ひでぇサンプル[-_-;])なるのです。   なお、「X = 」の行末はアンダースコア「_」。アンダースコートでは……   (ってそこでわざわざボケんでええわい>わし)。で、継続行を意味します。   継続行の指定が何故必要なのかというと、Visual Basicってのは最近の言語では   珍しく自由文脈文法ではないんですな。これはIf 〜 Then 〜 Elseの文法を拡張   する時に安直な道に流れた弊害が今に至るも尾を引いて……(って、知らんでも   全然問題ないことを書いて行数稼ぐのは止めろ>わし)。  c. 任意の文字列の入力をしたい場合   Choiceのように任意の「文字」は無理な気がするので、「文字列」ね。 Dim a a = InputBox("prompt", "window title", "default") Call MsgBox(a)   InputBoxはこの他にも引数があり、ダイアログの表示位置だのヘルプファイル名   や状況依存ヘルプのためのコンテキストIDも指定できます。が、それよりアイコンを   指定できて欲しかったぞ>MS   で、InputBoxで得られた文字列をどう処理すれば良いかという話になる訳ですが、   VBSには文字列処理関数が沢山あるし、上でも使ったSelct Caseが結構強力で: a = "てきとー" Select Case a Case "ほげほげ" b = 1 Case "てきとー" b = 0 Case "default" b = 2 End Select   といった真似ができます。   実を言えば、Caseの先に書けるのはリテラル(定数と書けよ>VBマニュアル)だけ   ではなく、「式」なのでもっと強力なこともできます。 Dim pa, pi, pu Do pa = LCase(InputBox("新シイぱすわーどヲドウゾ", "", "")) Loop Until pa <> "" Select Case pa Case LCase(InputBox("モウ一度入レテ下サイ", "", String(Len(pa), "*"))) pi = "…ドウゾ、オ入リ下サイ": pu = vbInformation Case Else pi = "侵入者アリ!": pu = vbCritical End Select Call MsgBox(pi, pu, "")   …これは今即興で書いて動作チェックも済みのコードなのだが、この、   「新しいパスワード」とやらを知るために血のにじむような苦労が必要な   RPG (AVGでも可)を作り、実際に中身のコードがこれだったらおもしろいかも。   (そうか?そーゆークソゲーを作った奴は、どっかの湖の底に重り付きで沈められる    ような気が……) Interrupt column 2 - プロンプト文字列   MsgBox()を使い出すとすぐに改行したり字下げしたくなるでしょう?   その場合、次の文字定数が使えます。 vbCrLf 改行 vbTab タブ文字   どのように使うかと言えば: MsgBox "これからHDDのフォーマットを" & vbCrLf & _ "行いますがよろしくなくもありんすよねん?" & vbCrLf & vbCrLf & _ vbTab & "[ OK ]を押すと中断" & vbCrLf & _ vbTab & "[Cancel]で中断をキャンセル", vbOkCancel, ""   #なんちゅう分かり難いダイアログ。まぁサンプルだから何書いても許されるよね?   ただ、上のように1つの関数がぐちゃぐちゃと続くのはやはり美しくないし、   各国語版に翻訳する際(って、あるのか?そーゆー場合が)にも文字列を探す手間が   面倒なので1ヶ所で全部定義しておくというのも手です。 Dim Msg_a, Msg_b Msg_a = "にゃおにゃお" & vbCrLf & _ "にゃぁぁん(はーとまーく)" Msg_b = "わんわん" & vbTab & "つーつー" & vbCrlf & "すりーすりー" <中略> Call MsgBox(Msg_b)   という具合です。確かMSのサンプルがそうなっていたような気もするな。 (EOF)