JScriptからperlを呼び出すよ!
2010-12-14
今日も、愛とロマンティックが止まらない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)が書けなくたってバッチ処理は出来るんです!!ドラッグ&ドロップ出来るんです!!!
ガシガシ書いて、バシバシ処理してはいかがでしょうか?
さ~て、明日はどなたでしょうか??