Tracks

書いてみたい方はココを参照下さい。

JScriptからperlを呼び出すよ! B!


techno-cat


今日も、愛とロマンティックが止まらないtechno-catデス;)

今回は、JScriptからperlを呼び出すよ!

まずは、前回の失態を修正、正しくはこうですよね。

<job>
<script language="PerlScript">

use strict;
use warnings;

$main::WScript->Echo( "hello world." );

</script>
</job>

(拡張子は"wsf")


これを、JScriptでやるとこんな感じ。

WScript.Echo( "hello world." );

(拡張子は"js")

って、こんなことをやりたいわけじゃないんです。


まずは、perlスクリプトを用意します。

use strict;
use warnings;

print "オッス!オラ悟○!! ";

(hello.pl)

実行方法は、もちろんこんな感じ。

> perl hello.pl


これを、同じフォルダ階層に置いたJScriptから呼び出します。

// perlスクリプトのファイル名
var script = 'hello.pl';

// スクリプトの絶対パスを作成
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
script = fso.BuildPath( fso.GetParentFolderName(WScript.ScriptFullName), script );

// コマンドを作成
var cmd = 'perl "' + script + '"';

// コマンドを実行
var WshShell = WScript.CreateObject( "WScript.Shell" );
var oExec = WshShell.Exec( cmd );

// 標準出力をメッセージボックスに表示
WScript.Echo( oExec.StdOut.ReadAll() );

(hello.js)


実はこれにも弱点があって、このままだと標準エラー出力が表示されません。

ですが、ご安心を!

// 標準出力
var stdout = oExec.StdOut.ReadAll();

// 標準エラー出力
var stderr = oExec.StdErr.ReadAll();

あとは、空文字列か判定して表示するだけですね!


それから、JScriptでも引数を受け取って、perlに引数を渡せます。

var args = WScript.Arguments;
for (var i=0; i<args.length; i++) {
	// WScript.Echo( args(i) );
}

(拡張子は"js")

この引数を念のためダブルクォーテーションで括って、コマンドライン文字列を作ればperlスクリプトに渡せます。


今までコマンドプロンプトで呼び出してた、そこアナタ!

BATファイル(*.bat)が書けなくたってバッチ処理は出来るんです!!ドラッグ&ドロップ出来るんです!!!

ガシガシ書いて、バシバシ処理してはいかがでしょうか?

さ~て、明日はどなたでしょうか??