56
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

すぐに使えるJScript関数集

Last updated at Posted at 2019-05-19

Windowsで動くJavaScriptことJScriptの関数集です。
コピペですぐに使えるように便利なものを集めています。

ダイアログを表示する

ダイアログを表示します

ダイアログを表示する
function alert(str){
    WScript.Echo(str);
}

ファイルの内容を取得する

ファイルの内容を文字列として取得します。同期的

文字コードは"UTF-8"として取得します。
第二引数に文字コードを指定することもできます。例:"Shift_JIS"

ファイルの内容を取得する
function file_open(file, encode){
    var stream = WScript.CreateObject('ADODB.Stream');
    stream.charset = encode || "UTF-8";
    stream.Open();
    stream.loadFromFile(file);
    var contents = stream.ReadText();
    stream.close();

    return contents;
}

ファイルに保存する

ファイルに文字列を保存します。同期的
ファイルが存在する場合は上書きし、存在しない場合はファイルを新規作成します。

文字コードは"UTF-8"として書き込まれます。
第三引数に文字コードを指定することもできます。例:"Shift_JIS"

ファイルに書き込む
function file_save(file, contents, encode){
    var stream = WScript.CreateObject('ADODB.Stream');
    stream.charset = encode || "UTF-8";
    stream.Open();
    stream.WriteText(contents);
    stream.SaveToFile(file, 2);
    stream.Close();
}

ファイルの存在を確認する

ファイルが存在するかの真偽値を返します

ファイルの存在を確認する
function file_exists(file){
    var fs = WScript.CreateObject("Scripting.FileSystemObject");
    return fs.FileExists(file);
}

ファイルをコピーする

ファイルをコピーします

ファイルをコピーする
function file_copy(from, to){
    var fs = WScript.CreateObject("Scripting.FileSystemObject");
    fs.CopyFile(from, to);
}

ファイルを移動する

ファイルを移動します

ファイルを移動する
function file_move(from, to){
    var fs = WScript.CreateObject("Scripting.FileSystemObject");
    fs.MoveFile(from, to);
}

ファイルを削除する

ファイルを削除します

ファイルを削除する
function file_delete(file){
    var fs = WScript.CreateObject("Scripting.FileSystemObject");
    fs.DeleteFile(file);
}

ファイル一覧を取得する

フォルダに存在するファイル一覧を配列で返します

第二引数を'full'とするとファイル名がフルパスに、'base'とすると拡張子を除いたファイル名が返ります

ファイル一覧を取得する
function file_list(dir, mode){
    var result = [];
    var fs     = WScript.CreateObject("Scripting.FileSystemObject");

    for (var e = new Enumerator(fs.GetFolder(dir).Files); !e.atEnd(); e.moveNext()){
        if(mode === 'base'){
            result.push(fs.GetBaseName(e.item()));
        }
        else if(mode === 'full'){
            result.push(e.item());
        }
        else{
            result.push(fs.GetFileName(e.item()));
        }
    }
    return result;
}

フォルダを作成する

フォルダを作成します

フォルダを作成する
function dir_create(dir){
    var fs = WScript.CreateObject("Scripting.FileSystemObject");

    if(!fs.FolderExists(dir)){
        fs.CreateFolder(dir);
    }
}

フォルダの存在を確認する

フォルダが存在するかの真偽値を返します

フォルダの存在を確認する
function dir_exists(dir){
    var fs = WScript.CreateObject("Scripting.FileSystemObject");
    return fs.FolderExists(dir);
}

フォルダをコピーする

フォルダをコピーします

フォルダをコピーする
function dir_copy(from, to){
    var fs = WScript.CreateObject("Scripting.FileSystemObject");
    fs.CopyFolder(from, to);
}

URLエンコード/デコード

encodeURIComponent()decodeURIComponent()が使用できます

JSONエンコード

変数をJSON文字列に変換します

JSONエンコード
function JSON_encode(obj){
    var htmlfile = WScript.CreateObject('htmlfile');
    htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=11">');
    return htmlfile.parentWindow.JSON.stringify(obj);
}

JSONデコード

JSON文字列を変数に変換します

JSONデコード
function JSON_decode(str){
    var htmlfile = WScript.CreateObject('htmlfile');
    htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=11">');
    return htmlfile.parentWindow.JSON.parse(str);
}

HTTP_GET

URLにアクセスしてHTML文字列を返します。同期的

HTTP_GET
function HTTP_GET(url){
    var http = WScript.CreateObject('Msxml2.ServerXMLHTTP');
    http.open('GET', url, false);
    http.send();
    return http.responseText;
}

IEを操作する

IEを起動させて指定URLにアクセスします。
documentオブジェクトが返るのでquerySelector()などのメソッドが利用できます。

IEは非表示で起動しますが、第二引数にtrueを指定すると表示されます。

※必ずスクリプト終了時にIE.browser.Quit();を実行してIEを終了させてください。

IE
function IE(url, visible){
    if(!IE.browser){
        IE.browser = WScript.CreateObject("InternetExplorer.Application");
        if(visible){
            IE.browser.Visible = true;
        }
    }
    IE.browser.navigate(url);
    while(IE.browser.Busy || IE.browser.readyState !== 4){
        WScript.Sleep(100);
    }
    return IE.browser.document;
}

IEの使用例。
Yahoo!Japan にアクセスして、titleタグの中身を取得し、表示します

IEの使用例
var document = IE("https://www.yahoo.co.jp/");
var $title = document.querySelector('title');
WScript.Echo($title.textContent);
IE.browser.Quit(); //これを忘れずに!

IEを使わず、windowを取得する

指定URLにアクセスし、windowオブジェクトを取得します。IEは起動しません。

windowオブジェクトを取得する
function get_window(url){
    var http = WScript.CreateObject('Msxml2.ServerXMLHTTP');
    http.open('GET', url, false);
    http.send();

    var htmlfile = WScript.CreateObject('htmlfile');
    htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=11">' + http.responseText);
    return htmlfile.parentWindow;
}

get_windowの使用例。
Yahoo!Japan にアクセスして、titleタグの中身を取得し、表示します

get_windowの使用例
var window = get_window("https://www.yahoo.co.jp/");
var $title = window.document.querySelector('title');
WScript.Echo($title.textContent);

クリップボードに保存する

クリップボードに文字列を保存します

※DOS窓が一瞬表示されます

クリップボードに保存する
function clip_set(str){
    var clip = WScript.CreateObject('WScript.Shell').Exec('clip');
    clip.StdIn.Write(str);
    clip.StdIn.Close();
    WScript.Sleep(50);
}

クリップボードから取得する

クリップボードから文字列を取得します

クリップボードから取得する
function clip_get(){
    var clip = WScript.CreateObject("htmlfile").parentWindow.clipboardData;
    return clip.getData("text");
}

現在の日付を取得する

現在の日付を"yyyy/mm/dd hh:mm:ss"形式で返します

現在の日付を取得する
function date(){
    var d      = new Date();
    var year   = d.getFullYear();
    var month  = ('0' + (d.getMonth()+1)).slice(-2);
    var day    = ('0' + d.getDate()).slice(-2);
    var hour   = ('0' + d.getHours()).slice(-2);
    var minute = ('0' + d.getMinutes()).slice(-2);
    var second = ('0' + d.getSeconds()).slice(-2);

    return year + '/' + month + '/' + day + ' ' + hour + ':' + minute + ':' + second;
}

コマンドを実行する

任意のコマンドを実行します。同期的

コマンドを実行する
function run(command){
    var shell = WScript.CreateObject('WScript.Shell')
    shell.Run(command, 1, true)
}

引数を配列で取得する

コマンドライン引数を配列で取得します。引数が存在しない場合は空配列です。

function get_args(){
    var args = []
    for(var i = 0; i < WScript.Arguments.Count(); i++){
        args.push(WScript.Arguments(i))
    }
    return args
}

終了する

スクリプトを直ちに終了します

終了する
function exit(){
    WScript.Quit()
}

多重起動防止

スクリプトの多重起動を防止します。
同じスクリプトが起動していたら、警告ダイアログを表示して終了します

多重起動防止
function SingleInstance(){
    var process = GetObject("WinMgmts:").ExecQuery("Select * From Win32_Process")
    var count   = 0

    for(var e = new Enumerator(process); !e.atEnd(); e.moveNext()){
        if(e.item().ExecutablePath === WScript.FullName && String(e.item().CommandLine).indexOf(WScript.ScriptFullName) > -1){
            count++
        }
    }

    if(count > 1){
        WScript.Echo(WScript.ScriptName + " is already running")
        WScript.Quit()
    }
}

入力ダイアログ

JScriptには入力ダイアログが存在しませんが、VBScriptから輸入すると使えるようになります。

wsf.png

JScriptとVBScriptを混成するには、次のようなwsfファイルを作成します。
すると、JScriptでprompt関数が使えるようになります。

sample.wsf
<job>
<script language="VBScript">
function prompt(message, title, value)
    prompt = InputBox(message, title, value)
end function
</script>

<script language="JScript">
var input = prompt('説明文', 'タイトル', '初期値');
WScript.Echo(input); //入力された内容が表示される
</script>
</job>

高度なGUI

高度なGUIアプリを作りたい場合は、次のようなhtaファイルを作成します。

exmple.hta
<!DOCTYPE html>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>HTAアプリ</title>

<ul>
  <li><a id="notepad" href="#">メモ帳を起動する</a></li>
</ul>

<script>
const shell = new ActiveXObject('wscript.shell');
document.querySelector("#notepad").addEventListener("click", function (){
    shell.run("notepad");
});
</script>

HTMLとCSSを使ってGUIを記述できます。
JavaScriptでconstが使えるので、IE11相当で動いていると思います。

注意する点としてWScriptオブジェクトが使えないので、代わりにnew ActiveXObject()を利用します。

ポリフィル

JScriptはES3相当なので、足りないメソッド(特にArray.indexOf)はポリフィルで補完しましょう。

Array.prototype.indexOf
Array.prototype.indexOf = function(obj, start){
    for(var i = (start || 0), j = this.length; i < j; i++){
        if(this[i] === obj){
            return i
        }
    }
    return -1
};
56
65
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
56
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?