▼ 2013/06/17(月) VBScriptで引数を受け取る、VBScriptで正規表現
2013/06/17 19:17 【研究課題】
やむにやまれぬ事情があって、いまさらながらVBScriptをちょっといじっている。
最初はバカにしていたけど、結構それなりに使えるものだというのはわかってきた。
何でもやってはみるもんだよね。
と、いうことで、2題ほどメモ代わりに書いてみる。
最初はバカにしていたけど、結構それなりに使えるものだというのはわかってきた。
何でもやってはみるもんだよね。
と、いうことで、2題ほどメモ代わりに書いてみる。
■VBScriptで引数を受け取る
Windowsの標準的な方法で、名前付き引数と名前なし引数を受け取る方法。
'コマンドラインから引数の取得 dim objWshNamed,objWshUnNamed '名前付き引数 set objWshNamed = WScript.Arguments.Named '名前なし引数 set objWshUnNamed = WScript.Arguments.UnNamed wscript.echo "名前なし引数は、" & cstr(objWshUnNamed.Count) & " 件" dim i for i= 0 to objWshUnNamed.Count - 1 wscript.echo objWshUnNamed(i) next dim iProcessedNamed iProcessedNamed = objWshNamed.Count wscript.echo "名前付き引数は、" & cstr(iProcessedNamed) & " 件" if iProcessedNamed > 0 then if objWshNamed.Exists("output") then wscript.echo "output が指定されていました。" & objWshNamed.item("output") iProcessedNamed = iProcessedNamed - 1 end if if objWshNamed.Exists("input") then wscript.echo "input が指定されていました。" & objWshNamed.item("input") iProcessedNamed = iProcessedNamed - 1 end if ' 指定された名前付き引数を全部並べる dim cmd for each cmd in objWshNamed wscript.echo cmd & " : " & objWshNamed.item(cmd) next end if
■VBScriptで正規表現を使う
RegExpというオブジェクトを使えば、正規表現を使った文字列の置換などができる。すばらしい。まずは単純な置き換えだと、以下のようになる。
' VBScriptで正規表現 dim re set re = New RegExp re.Pattern = "xml$" '行末にあるxmlを… dim sStr sStr = "c:\temp\sss\bbb\ccccc\dd.xml" msgbox "文字列「" & sStr & "」の末尾のxmlをxlsに変更する。" msgbox re.Replace(sStr,"xls")設定したパターンによって、文字列を検索することなども可能。すばらしい。
以下の内容のvbsファイルを作って、第一引数に適当にIPアドレスっぽい数値を入れてやると、2桁や一桁の数値も3ケタに均してくれるよ。
' VBScriptで正規表現 dim re set re = New RegExp dim sStr sStr = WScript.Arguments.UnNamed(0)'第一引数を変換する re.Pattern = "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})" '1から3桁の数値がよっつ if re.test(sStr) then '変換できた dim matches set matches = re.Execute(sStr) sStr = right("000" & matches(0).subMatches(0), 3 ) & "." & _ right("000" & matches(0).subMatches(1), 3 ) & "." & _ right("000" & matches(0).subMatches(2), 3 ) & "." & _ right("000" & matches(0).subMatches(3), 3 ) wscript.echo sStr else '変換できなかった wscript.echo "「" & sStr & "」は" & re.Pattern & "にマッチする文字列ではありませんでした。" end if実行してみるとこんな感じになる。
>cscript /nologo UseRegExp2.vbs 192.11.1.1まだいくつかネタはあるけど今日はこんなところで。
192.011.001.001
- TB-URL http://snjx.info/diary/adiary.cgi/snjx/055/tb/