管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

WSH(JScript)でよく使う処理をメモ

WSHをVBScriptではなく、JScriptから利用することが多いです。
引数チェックやファイルからの読み込みなど、良く書く処理をこちらにメモ

メモ

({
    // ファイルの内容を配列に格納して返却
    // 引数1:ファイルパス
    // 返却値:ファイル内容のString型配列
    fileToArray: function (filePath) {
        var IOMODE_FOR_READEING=1;
        var IOMODE_FOR_WRITING =2;
        var IOMODE_FOR_APPENDING=8;

        var TRISTATE_FALSE=0; // ASCII,既定
        var TRISTATE_TRUE=-1; // Unicode
        var TRISTATE_USE_DEFAULT=-2; // システムデフォルト

        var fileArray = [];

        var fso = null;
        var textFile = null;
        try {
            fso = WScript.CreateObject("Scripting.FileSystemObject");
            // 指定のファイルが存在しないときは新規作成しない
            textFile = fso.OpenTextFile(filePath,IOMODE_FOR_READEING,false,TRISTATE_USE_DEFAULT);

            while (!textFile.AtEndOfStream) {
                fileArray.push(textFile.ReadLine());
            }
        } catch (err) {
            WScript.Echo(err.message);
        } finally {
            if (textFile != null) {
                textFile.Close();
            }
            fso = null;
        }
        WScript.Echo("行数:" + fileArray.length);
        return fileArray;
    },
    // 引数の数を満たしているか判定
    // 引数1:引数の数
    isArgsNumSatisfied: function (argsNum) {
        if (WScript.Arguments.length < argsNum) {
            return false;
        }
        return true;
    },
    // 本スクリプトがクリック起動されたかどうかを判定
    isClicked: function () {
        var WSCRIPT_EXE = "wscript.exe";
        var scriptEnironment = new String(WScript.FullName);

        // 実行環境がwscript.exe だとクリック起動
        // コマンドライン起動だとcscript.exe
        // 条件誤りを修正
        // if (scriptEnironment.lastIndexOf(WSCRIPT_EXE) == -1) {
        if (scriptEnironment.lastIndexOf(WSCRIPT_EXE) > -1) {
            return true;
        }

        return false;
    },
    main: function () {
        if (this.isClicked()) {
            WScript.Echo("クリックされました");
        }

        var argsNum = 1;
        if (!this.isArgsNumSatisfied(argsNum)) {
            WScript.Echo("引数は" + argsNum + "つ入力してください");
        }

        var filePath = WScript.Arguments(0);
        var fileArray = this.fileToArray(filePath);
        for (var i = 0; i < fileArray.length; i++) {
            WScript.Echo(fileArray[i]);
        }
    }
}).main()

実行例

PS C:\Users\hoge\Documents\jscript\snippets> cscript //nologo .\snippets.js test.txt
クリックされました
行数:6
a
b
c
de
f
あ
PS C:\Users\hoge\Documents\jscript\snippets>