ようこそゲストさん

Super Neurotic Junction

2013/06/17(月) VBScriptで引数を受け取る、VBScriptで正規表現

2013/06/17 19:17 研究課題snjx
やむにやまれぬ事情があって、いまさらながらVBScriptをちょっといじっている。
最初はバカにしていたけど、結構それなりに使えるものだというのはわかってきた。
何でもやってはみるもんだよね。
と、いうことで、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
まだいくつかネタはあるけど今日はこんなところで。

名前:  非公開コメント   

E-Mail(任意/非公開):
URL(任意):
  • TB-URL  http://snjx.info/diary/snjx/055/tb/