Batch file to VBScript file (10) at 1999.Sep.10 3.8 ささやかな実用例(続き) 四. 簡易ファイルリストエディタ  まぁその。Nifty, fmpc, mes:11, #01168に書いた奴とほぼ同じなのですが。  (nifty URLって?それ何?おいしいの??←自分には全く恩恵がないので   知らないことにしていたいらしい[^^;;]) Set fso = CreateObject("Scripting.FileSystemObject") Set fo = fso.GetFolder(".") sFs = Array(): Const FADD = 10 Function listFiles(fo, ext) ' 特定の拡張子をもつファイルをあるだけ列挙 Dim i: Set fs = fo.Files ' このDim iは必須。ないと後できっと泣きを見る For Each f In fs If StrComp(LCase(ext), LCase(fso.GetExtensionName(f.Name))) = 0 Then mx = UBound(sFs) ' 配列の上限を調べる If mx < i Then ReDim Preserve sFs(mx + FADD) ' 配列サイズを増やす sFs(i) = f.Name: i = i + 1 End If Next: listFiles = i End Function Function selFile(ar, mx) ' 不用ファイルの除去 selFile = False s = "0で終了" & vbCrLf For i = 0 To mx - 1 s = s & vbCrLf & i + 1 & ". " & ar(i) Next i = InputBox(s, "除外したいファイルを選択", 0) ' Enterキーが便利ですよ If i = "" Then Wscript.Quit ' キャンセルまたはESCキーで終わり If i <> 0 Then ar(i - 1) = "": selFile = True End Function ' === Entry ==== fc = listFiles(fo, "exe") ' *.exeなファイルを列挙 Select Case fc Case 0: MsgBox "ファイルがありません": Wscript.Quit Case 1 ' 1個しかないなら選択のしようがないので選択はパス Case Else: Do While selFile(sFs, fc): Loop ' 幾つでも選択可能 End Select For i = 0 To fc - 1 If sFs(i) <> "" Then s = s & sFs(i) & vbCrLf Next MsgBox s あっしはMP3プレーヤを持ってないので(しつこい!)、ここでは.exeで試して ますが、まぁお試しあれ。 五. 何分何秒経過したかを出すだけの安直計算機  だから何?とか言われると、とっても困るのだが、バッチで:  Echo start> now.txt  ver | time >> now.txt  {馬鹿長い処理}  ver | time >> now.txt  とかやった後で、経過時間の計算をする時にちゃちゃっと作った奴です。 Const st = "何分何秒経過したかを計算" a = Time Do a = InputBox("Start time", st, a): If a="" Then Exit Do b = InputBox("End time", st, a): If b="" Then Exit Do c = DateDiff("s", a, b): a = CDate(b) MsgBox c \ 60 & ":" & c Mod 60 Loop While True 六. ちょっとまともに関数電卓  こいつは短い割にちゃんと作ってます。完全数式通りの電卓です。  「4 + 6 / 2 * sin(0.5) + 4 ^2」何てのを食わしてもそれなりな答えが返る  でしょ?  え?電卓でもない凡人たる人の子には答えが合っているかなど分からないって?  いやその。私もそーです。同士よ!  …ぢゃなくてぇ。  ポイントはStrComp()でvbTextCompareを指定すると大文字・小文字は同一視  されることです。 Option Explicit On Error Resume Next Dim a, s, ss, h: h = False Do s = InputBox("式?('&h':16進出力)"& vbCrLf & s, "簡易関数電卓", a) If s = "" Then Exit Do If StrComp(s, "&h", vbTextCompare) = 0 Then h = True Else a = Eval(s) If h Then ss = " (" & Hex(CLng(a)) & ")" Else ss = "" a = s & "=" & a & ss If Err <> 0 Then Call MsgBox("Error: " & Err & ", " & Err.Description,_ vbExclamation, "エラー") Err.Clear: a = s End If End If Loop While True  いや。本当のポイントは実はエラートラップ。無茶苦茶な入力してもこの  スクリプトは止まらないでしょ?(On Error...の説明をヘルプで見てね)  ふふふ。本当の本当はEval()がポイントだったりする。何気ないようだけど、  Eval()と同じことをCで書こうとすると泣きます。加減算より乗除算を優先し、  でも括弧があったらそっちが優先ね。ってなのを単純な文字列処理でできると  思うなら大間違い。lexだ、yaccだ。ってな話になりかねません(本当か?)。  少なくとも構文木をどーたらって話になることは確か(と、思う)。  それにこいつは実はVBSの式評価ルーチンそのものを呼び出しているので、  文字コードだってAsc("@")とかやればOKOK。  まぁでも。こういうのは言語の得手不得手を理解してれば自然に使い分けも  できる所でもあります。  ちなみにLISP (*1) 辺りもこういう式の評価は得意でしたな。LISPで書くPrologと  Prologで書くLISPとどっちが簡単か。何て言われてあたしはぁぅぁぅでしたが。  (LISPはちっちゃな練習問題なら何とか自力で解けたけど、Prologは解説して   もらってもいまいち理解できなかったです。。。)  ところで、Hex(CLng(a))というのもミソの1つ。黙っているとVBSって変数が  16 bitなので、とっても悲しい結果を出してくれます。 (*1) FORTRANと同じぐらい古い言語。LISPの意味は「馬鹿みてぇに沢山括弧が  出て来てイラ付く(言語)」……本気にしないように(居るか!そんな奴)。   ↑  済んませんねぇ(へこへこ)。あっしが当時持っていた処理系じゃあ"]"が使え  なかったし、エディタも……でしたから(^^;;  ちなみにLIPSは某社LBPのページ記述言語(って誰も聞いてないか……) (EOF)