VBScript、JScript、Wscript … なんとまあ
-
19-09-2019 - |
質問
Big Financial Corp のアナリストをサポートするために、WinXP 用のスクリプトをいくつか書く必要があります。私のニーズに最も適した Windows スクリプトの種類を決定するのに役立ててください。
私のニーズは非常に単純に思えます(とにかく私にとって)
- WinXP Pro SP2 (バージョン 2002) で実行
- ユーザーに何もインストールする必要はありません (つまり、Powershell は廃止されました。同様に、Perl、Python、およびスタックオーバーフローでのこの種の質問に対するその他の一般的な提案)
- コンパイルされていない言語で書かれている (そのため、ユーザーは将来それらを変更する機会があります)
- かなり完成度の高い言語機能 (特に日付/時刻操作関数)。サブルーチン、再帰などの最新の概念も取り入れたいと思っています)
- 他のプログラムを起動および制御する機能 (コマンドラインで)
私の選択肢を急いで見直したところ、私の選択は次のようです。
- VBスクリプト
- Wスクリプト
- JScript
これら (または WinXP の標準インストールで利用可能な他のもの) について学習したり、詳細にレビューしたりする時間がありません。できるだけ早く何かを見つけてハッキングする必要が非常に緊急にあります。
(現在の危機は、いくつかの日付パラメータを渡して特定のアプリケーションを実行する必要があることです)。
現在の危機が去れば、このような要望はさらに増えるだろう。
助けて オビワン スタックオーバーフロー...あなたは私の唯一の希望です。
[編集] 私の現在のスキルセットには Perl、JavaScript、Java が含まれているため、これらに似たものを使用するのが最も快適です
[編集]わかりました。JScriptでWSHファイルを書いてみます。みんな、ありがとう...このあたりの状況が少し落ち着いたら、どうなるか(そして答えを受け入れるかどうか)をお知らせします。
[編集] 最終的にはすべてうまくいきました。皆様、素早いご回答ありがとうございます。これが私がユーザーに提供したものです
<job id="main">
<script language="JScript">
// ----- Do not change anything above this line ----- //
var template = "c:\\path\\to\\program -##PARAM## --start ##date1## --end ##date2## --output F:\\path\\to\\whereever\\ouput_file_##date1##.mdb";
// Handle dates
// first, figure out what they should be
dt = new Date();
var date1 = stringFromDate(dt, 1);
var date2 = stringFromDate(dt, 2);
// then insert them into the template
template = template.replace(new RegExp("##date1##", "g"), date1);
template = template.replace(new RegExp("##date2##", "g"), date2);
// This application needs to run twice, the only difference is a single parameter
var params = ["r", "i"]; // here are the params.
// set up a shell object to run the command for us
var shellObj = new ActiveXObject("WScript.Shell");
// now run the program once for each of the above parameters
for ( var index in params )
{
var runString = template; // set up the string we'll pass to the wondows console
runString = runString.replace(new RegExp("##PARAM##", "g"), params[index]); // replace the parameter
WScript.Echo(runString);
var execObj = shellObj.Exec( runString );
while( execObj.Status == 0 )
{
WScript.Sleep(1000); //time in milliseconds
}
WScript.Echo("Finished with status: " + execObj.Status + "\n");
}
// ----- supporting functions ----- //
// Given a date, return a string of that date in the format yyyy-m-d
// If given an offset, it first adjusts the date by that number of days
function stringFromDate(dateObj, offsetDays){
if (typeof(offsetDays) == "undefined"){
offsetDays = 0;
}
dateObj.setDate( dateObj.getDate() + offsetDays );
var s = dateObj.getYear() + "-"; //Year
s += (dateObj.getMonth() + 1) + "-"; //Month (zero-based)
s += dateObj.getDate(); //Day
return(s);
}
// ----- Do not change anything below this line ----- //
</script>
</job>
明らかにその方が良いかもしれません...しかし、それは仕事を完了し、私のユーザーが理解して自分自身を拡張するのに十分簡単です。
解決
これらは、異なる構文を持つすべての技術的に同じものです。実際のWScript /ます。CScriptは、VBScriptとJScriptが言語です、エンジンです。
個人的な意見は、以下:それは本当のプログラミング言語の多くのことを思い出すと、私はの少ないのことが多いのVBScriptよりも顔に自分自身をパンチしたくなるので、私の個人的な勧告は、JScriptのです。そして、JavaScriptを使用して精通与え、あなたの最善の策は、JScriptのです。
他の人が持っているように、のWScriptとてCScriptの違いについて、もう少し詳細に行く:これらは、Windows Script Hostをスクリプトのためのあなたの実行プラットフォームです。 WScriptは、より多くのGUI志向であるのに対し、彼らは、基本的に同じものであり、ます。CScriptは、より多くのコンソールが指向です。あなたがてCScriptでスクリプトを起動する場合は、コンソールウィンドウが表示されますが、あなたはまだGUIの機能へのアクセスを持って、あなたはWScriptので開始した場合、そこにはコンソールウィンドウはなく、デフォルトの出力方法の多くではなく、ウィンドウオブジェクトとして表示されるのに対し、コンソールで行ます。
他のヒント
は、おそらく/ <のJScriptでOKでしょうA>。それはまともな言語、およびVBScriptのより複雑なスクリプトのために、確かに、より適しています。
あなたはVBScriptのに使用するのは簡単しかし、JScriptのを使用してアクセスする痛みを伴ういくつかのAPIが発生しますので、ただし、マイクロソフト 1 は、のJavaScriptを嫌っています。自分で考えてみましょう。
...と警告 けらけら笑うノートをとして1 <サブ>擬人化は、一般的な欠如、光沢サポートを注意するために使用されます。公式政策の証拠と解釈されるべきではない。サブ>
私の選択は、JScriptのを使用してWSHだろう。 JScriptのが利用可能であるときは、なぜVBScriptを使用していますが、可能性があります。
ここでのWindows Script Hostを参照である。
ます。CScriptを忘れないでください。 Windowsスクリプトホストは、多くの場合、大企業では、グループポリシーで無効になっているためと、ここで注意してください。その場合は、すべてのあなたの基準を満たす唯一のオプションは、(身震い)バッチです。
なしのこれらのは、あなたのために働く場合は、、あなたの最良のオプションは、おそらくあなたがプログラムソースを配布するコンパイルされたプログラムです。
を使用するのJScript。 WScript /します。cscriptエンジンとJScriptのを使用して、ブラウザでJavaScriptを書くの主な違いは、ブラウザのセキュリティ制限を持っていないということです。あなたは実際には、あなたはおそらく、言語機能を心配するよりも、これらのカスタムオブジェクトおよびインターフェイス上に読んで多くの時間を費やすなどのアプリケーションを操作するためのActiveX / COMオブジェクトへのアクセス、レジストリを、またを持っています。もちろん、あなたが
など、正規表現の、JavaScriptの日付のすべての利点を取得します MSDNするからA サンプルJScriptのアプリあなたが始めるのに役立つかもしれません。
残念ながら、Microsoftのサンプルスクリプトのほとんどは、VBScriptになりがちが、構文はあなただけのCOMインターフェイス詳細を選び出すしようとしている場合は特に、従うことは非常に簡単です。
の他の回答にビットを拡張するために、WScriptのとてCScriptをVBScriptの(Visual Basicの構文など)やJScript(JavaScriptのような構文)で記述されたスクリプトを実行するために使用するプログラムです。 WScriptは窓なしでそれらを実行し、echoコマンドは、ポップアップメッセージボックスへの書き込みに対し、エコーコマンドは、コンソールに書き込みます。CScriptように、コンソールウィンドウからスクリプトを実行します。
あなたはWSH(Windowsスクリプティングホスト)とWSC(Windowsのスクリプトコンポーネント)が2つの言語で既存のコードをマージする必要がある場合は、XMLベースのラッパーでそれらを組み合わせることにより、VBScriptとJScriptの両方を使用するスクリプトを書くことができます。
また、「ハイパーテキストアプリケーション」の略でHTAスクリプトを書くことができます。これらはあなたがHTMLコントロールを使用してインタフェースを提供することを可能にするInternet Explorerで実行さHTAの拡張子を持つHTMLファイル内のスクリプトコードですが、また、あなたのシステムへの完全なアクセス権を持っているので、ローカルで実行します。
これらのすべては、Windowsスクリプティングホストとかなり強力なベースの言語と共にWindowsの98以降のすべてのWindowsコンピュータに同梱されているアクティブスクリプト技術に基づいており、彼らはまた、あなたは大規模なシステムとネットワークの情報については、WMIへのアクセスを提供し、 Wordを自動化するための管理、およびCOM能力は、エクセル等また、あなたが作成し、アクセスMDBはAccessがインストールされていない場合でも、ファイルを操作するADOとADOXを使用することができます。
JScriptのは、VBスクリプトよりもはるかに少ない恐ろしい言語ですが、問題は、VBスクリプトは、日付や数値のフォーマットのようなもののためにそれに組み込まれている便利な機能のより完全なライブラリを持っていることです。それは最初に表示されるあなたがJScriptのに使用するヘルパーオブジェクトの独自のライブラリを作成し、インストールすることができない限り、それは、実際に簡単な選択ではありません。