MACアドレスの取得とUWSCの優位性について
別件調査中に、UWSCでのMACアドレス取得方法を見つけた。
http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&mode=all&no=2855&log=ON&cnt=24
相変わらず素晴らしい。
msgbox(betweenstr(doscmd("ipconfig /all"), "Physical Address. . . . . . . . . : ", chrb(13)))
このシンプルさ。
ただ、
はたしてどれだけの言語がこの処理を1行で書けるだろうか?
ともあったので、必死に考えてみた。
とりあえず考える
手元のWindows環境にはPerlすらないので、WSH(VBS/JS)かPowershell。
Powershellは、doscmdは問題なし。betweenstrは正規表現だね。
[Text.RegularExpressions.Regex]::Match((ipconfig /all), "(?:Physical Address[^:]*: )([^ ]*)").Groups[1].Value
少し長いですね。
名前修飾がなんとかなればねぇ。
まあ、UWSCのbetweenstrが偉大です。
正規表現は柔軟なのですきなんですけどね。
WScript.Echo((new ActiveXObject('WScript.Shell')).Exec('ipconfig /all').StdOut.ReadAll().match(/(?:Physical Address[^:]*: )(.*)/)[1])
また長くなりました。
Execするのにオブジェクトを作って、結果取り出しのメソッド連結が痛い。
WScript.Echo Split(Split(CreateObject("WScript.Shell").Exec("ipconfig /all").StdOut.ReadAll,"Physical Address. . . . . . . . . : ")(1))(0)
VBSには、Split関数という味方がいますね。
これも実行用オブジェクトが痛い。
対比
言語 | 表示 | コマンド実行 | 切り出し | 備考 |
---|---|---|---|---|
UWSC | MSGBOX | DOSCMD(〜) | BETWEENSTR | |
Powershell | (なし。オブジェクト返すと表示) | (〜) | 正規表現 | 切り出しが判り難いか |
WSH/JS | WScript.Echo | (WScript.Shell).Exec(〜).StdOut.ReadAll | 〜.match | 実行結果取得がね |
WSH/VBS | WScript.Echo | (WScript.Shell).Exec(〜).StdOut.ReadAll | Split(Split) | wscriptでもコマンドプロンプトが出るのも |
考察
最初、複文が必要かと思ったのですが、なんとかなりました。
Powershellは最初からいけると思いましたが。
Javascriptは苦戦しました。
VBScriptはSplit関数を思い出して、なんとか複文を免れました。
やりたいことがシンプルに出来るよう用意されている、それがUWSCの強みですね。