以下の内容はhttps://eel3.hatenablog.com/entry/20120227/1330346040より取得しました。


そしてVBScript(WSH)でワンライナー、不発ぎみ

id:eel3:20120227:1330345751 でWSHJScriptワンライナーできるようになった以上、VBScriptでも実現しておかないと夜道が怖いので*1

Option Explicit

If WScript.Arguments.length <> 1 Then
    WScript.StdErr.WriteLine "usage: cscript " & WScript.ScriptName & " ""evaluate script"""
    WScript.Quit 1
End If

Execute WScript.Arguments(0)
WScript.Quit 0

VBScriptではExecuteステートメントを使う。というかこんなステートメントもあったんだ……。

Executeでエラーが発生した時の挙動がイマイチなのだけど、On Error Resume Nextを使って自前でエラーをハンドリングしようとしたら構文エラーが捕捉出来なかったので、諦めて自動的に中断されるがままにしてある。Executeで構文エラーが発生した時は実行時エラー扱いして欲しかった。

残念なことにWScript.Argumentsの仕様による制限でダブルクォートを含む文字列を引数としてうまく渡すことができないので、文字列リテラルは事実上使えない。文字列リテラルが不要ならワンライナーできる。

D:\temp>cscript vbscript_oneliner.vbs //Nologo "WScript.Echo 6 * 4"
24

D:\temp>cscript vbscript_oneliner.vbs //Nologo "For i = 0 To 2 : WScript.Echo i : Next"
0
1
2

D:\temp>cscript vbscript_oneliner.vbs //Nologo "For Each i In Array(3, 5, 4) : WScript.Echo i : Next"
3
5
4

D:\temp>

Option Explicitは適用されないらしい。

これまたバッチファイルでラッピング。

@echo off
cscript.exe "%~dp0vbscript_oneliner.vbs" //Nologo %*
D:\temp>vbscriptol.bat "WScript.Echo 6 * 4"
24

D:\temp>

ほぼ確実に需要は無いだろうし、仮にあったとしても文字列リテラルを使ないので、このスクリプトは使い道が無い。

*1:単なる被害妄想。




以上の内容はhttps://eel3.hatenablog.com/entry/20120227/1330346040より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14