WSH の ExpandEnvironmentStrings メソッドを使うときの注意点
はまったのでメモ。
WSH で Windows の環境変数を展開するためのメソッドに、ExpandEnvironmentStrings メソッドがあります。
このメソッドで得られるのは、環境変数を展開した値の文字列ですが、Windows の環境変数には、JScript でのメタ文字である、\(バックスラッシュ)が、パス区切り文字として、含まれていることがあります。
文字列として用いる場合は自動で \ (バックスラッシュ)がエスケープされて問題ないのですが、正規表現として用いる場合は、自動でエスケープされないので、事前にエスケープしておく必要があります。以下、サンプルスクリプト。
//正規表現で文字列を検索した結果を返す関数 function TestFunc(testStr1, testStr2){ var TestRegExp = new RegExp(testStr1); var testResult = TestRegExp.test(testStr2); return testResult; } var WshShell = WScript.CreateObject("WScript.Shell"); //デフォルトならば、%SystemRooT% = C:\WINDOWS, //%ComSpec% = C:\WINDOWS\system32\cmd.exe var envSysRoot = WshShell.ExpandEnvironmentStrings("%SystemRooT%"); var envComSpec = WshShell.ExpandEnvironmentStrings("%ComSpec%"); var test1 = TestFunc(envSysRoot, envComSpec); var escapedEnvSysRoot = envSysRoot.replace(/\\/g, "\\\\"); var test2 = TestFunc(escapedEnvSysRoot, envComSpec); WScript.Echo(test1 + "," + test2);//=>"false, true"