1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSFのすすめ(VBScriptが書ける人向け)

Last updated at Posted at 2025-04-12

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コードは以下のようになる。
※タグ記号(<)はエスケープ(&lt;)しないとエラーになるので要注意

<?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 = '&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 で保存する。


<参考記事>
同じ文字列を繰り返す

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?