VBScript が 2027年には廃止(Windowsから削除)されるということで戦々恐々としている御仁もおられるかもしれないが安心して欲しい。WSH(Windows Script Host)そのものが廃止されるわけではないので、JScript や WSF で VBScript の代替が可能だ。
もともと、VBScript は配列の機能が弱く、文字列の囲みもダブルクォーテーションしか使えないのでコードが冗長になりやすいという欠点があった。この機会に JScript(≒ Javascript)に移行して、Javascriptライフを楽しもう。これからは Javascript の時代だ。(今更だが)
下記サイトに記載されていたWSFコードの解説がわかりやすいのでテンプレとして使えると思う。
wsh(.wsf、Windows Script File)のスクリプトを育てる(1)
<?xml version="1.0" encoding="UTF-8" ?>
<package>
<job id="start">
<script type="text/jscript">
var wShll = new ActiveXObject("WScript.Shell");
wShll.Run('cmd /k cscript //nologo //job:main ' + WScript.ScriptFullName, 1, false);
</script>
</job>
<job id="main">
<script type="text/jscript">
WScript.Echo("hello!!");
</script>
</job>
</package>
上記のコードをテンプレとしてクリップボードにコピーするWSFコードは以下のようになる。
※タグ記号(<)はエスケープ(<)しないとエラーになるので要注意
<?xml version="1.0" encoding="UTF-8" ?>
<package>
<job id="start">
<script type="text/jscript">
var wShll = new ActiveXObject("WScript.Shell");
wShll.Run("cmd /k cscript //nologo //job:main " + WScript.ScriptFullName, 1, false);
</script>
</job>
<job id="main">
<script type="text/jscript">
var tb = Array(5).join(' ');
var tb2 = tb + tb;
var tb3 = tb + tb2;
var Yn = '\r\n';
var lt = '<'
var codeStr = lt + '?xml version="1.0" encoding="UTF-8" ?>';
codeStr += Yn + lt + 'package>';
codeStr += Yn + tb + lt + 'job id="start">';
codeStr += Yn + tb2 + lt + 'script type="text/jscript">';
codeStr += Yn + tb3 + 'var wShll = new ActiveXObject("WScript.Shell");';
codeStr += Yn + tb3 + 'wShll.Run("cmd /k cscript //nologo //job:main " + WScript.ScriptFullName, 1, false);';
codeStr += Yn + tb2 + lt + '/script>';
codeStr += Yn + tb + lt + '/job>';
codeStr += Yn + tb + lt + 'job id="main">';
codeStr += Yn + tb2 + lt + 'script type="text/jscript">';
codeStr += Yn + tb3 + 'WScript.Echo("hello!!");';
codeStr += Yn + tb2 + lt + '/script>';
codeStr += Yn + tb + lt + '/job>';
codeStr += Yn + lt + '/package>';
var wShll = new ActiveXObject("WScript.Shell");
wShll.Exec("clip").StdIn.Write(codeStr);
WScript.Echo("WSFベースコードをコピーしました!");
</script>
</job>
</package>
JScript の部分だけを拡張子 .js で別ファイルに書き出すこともできるが、その場合はファイルの文字コードを Shift-JIS で保存する。
<参考記事>
同じ文字列を繰り返す