6

ここBigFinancialCorpのアナリストをサポートするために、WinXP用のスクリプトを作成する必要があります。自分のニーズに最適なWindowsスクリプトの種類を決定するのを手伝ってください。

私のニーズはかなり単純に見えます(とにかく私には)

  1. WinXP Pro SP2(バージョン2002)で実行
  2. ユーザーに何もインストールする必要はありません(Powershellがリリースされました。同様に、Perl、Python、およびスタックオーバーフローに関するこれらのタイプの質問に対するその他の一般的な提案)
  3. コンパイルされていない言語で書かれている(ユーザーが将来それらを変更する機会があるように)
  4. 適度に完全な言語機能(特に日付/時刻操作関数。サブルーチン、再帰などの最新の概念も必要です)
  5. 他のプログラムを起動および制御する機能(コマンドラインで)

私のオプションの急いでのレビューから、私の選択は次のように見えます

  1. VBScript
  2. WScript
  3. 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>

明らかにそれはより良いかもしれません...しかしそれは仕事を成し遂げて、私のユーザーが彼自身を理解して拡張するのに十分簡単です。

4

7 に答える 7

27

これらはすべて技術的に同じものであり、構文が異なります。実際には、WScript / CScriptがエンジンであり、VBScriptとJScriptが言語です。

個人的な意見は次のとおりです。私の個人的な推奨事項はJScriptです。これは、実際のプログラミング言語を思い出させ、VBScriptよりも頻繁に顔を殴りたくないからです。また、JavaScriptに精通していることを考えると、最善の策はJScriptです。

他の人が持っているように、WScriptとCScriptの違いについてもう少し詳しく説明します。これらは、WindowsScriptHostのスクリプトの実行プラットフォームです。これらは本質的に同じものですが、WScriptはよりGUI指向であり、CScriptはよりコンソール指向です。スクリプトをCScriptで開始すると、コンソールウィンドウが表示されますが、GUI機能にアクセスできますが、WScriptで開始すると、コンソールウィンドウはなく、デフォルトの出力メソッドの多くは、ウィンドウオブジェクトではなくウィンドウオブジェクトとして表示されます。コンソールの行。

于 2009-10-02T19:13:16.957 に答える
4

JavaScriptが好きなら、おそらくJScriptで大丈夫でしょう。これはまともな言語であり、VBScriptよりも複雑なスクリプトに適しています。

ただし、Microsoft 1はJavaScriptを 嫌うため、VBScriptで使用するのは簡単ですが、JScriptを使用してアクセスするのは面倒なAPIに遭遇します。警告されたと考えてください...

スニッカーが指摘しているように、WScriptは両方を駆動するエンジンです。

1一般的な光沢のないサポートに注意するために使用される擬人化。公式の方針の証拠として解釈されるべきではありません。

于 2009-10-02T19:16:14.283 に答える
2

私の選択は、JScriptを使用したWSHです。VBScriptを使用することもできますが、JScriptが利用できるのはなぜですか。

これは、WindowsScriptHostのリファレンスです。

于 2009-10-02T19:15:03.300 に答える
2

CScriptを忘れないでください。また、大企業ではグループポリシーによってWindowsスクリプトホストが無効になっていることが多いため、ここでは注意が必要です。その場合、すべての基準に適合する唯一のオプションは(シャダー)バッチです。

それらのどれもうまくいかない場合、あなたの最良の選択肢はおそらくあなたがプログラムと一緒にソースを配布するコンパイルされたプログラムでしょう。

于 2009-10-02T19:15:52.457 に答える
2

JScriptを使用します。WScript / cscriptエンジンでJScriptを使用することと、ブラウザーでJavaScriptを作成することの主な違いは、ブラウザーのセキュリティ制限がないことです。また、アプリケーションやレジストリなどを操作するためのActiveX / COMオブジェクトにもアクセスできます。実際、言語機能について心配するよりも、これらのカスタムオブジェクトやインターフェイスを読むのに多くの時間を費やすでしょう。もちろん、JavaScriptの日付、正規表現などのすべての利点を利用できます。

MSDNのサンプルJScriptアプリは、開始するのに役立つ場合があります。

残念ながら、MicrosoftのサンプルスクリプトのほとんどはVBScriptである傾向がありますが、特にCOMインターフェイスの詳細を取得しようとしている場合は、構文を理解するのは非常に簡単です。

于 2009-10-02T19:29:49.450 に答える
2

相手の答えを少し拡張するために、WScriptとCScriptは、VBScript(Visual Basicのような構文)またはJScript(JavaScriptのような構文)で記述されたスクリプトを実行するために使用されるプログラムです。CScriptはコンソールウィンドウからスクリプトを実行するため、Echoコマンドはコンソールに書き込みますが、WScriptはウィンドウなしでスクリプトを実行し、Echoコマンドはポップアップメッセージボックスに書き込みます。

既存のコードを2つの言語でマージする必要がある場合は、VBScriptとJScriptの両方を使用するWSH(Windows Scripting Host)およびWSC(Windows Scripting Component)スクリプトをXMLベースのラッパーで組み合わせて作成できます。

「ハイパーテキストアプリケーション」の略であるHTAスクリプトを作成することもできます。これらは、Internet Explorerで実行されるHTA拡張子を持つHTMLファイルのスクリプトコードです。これにより、HTMLコントロールを使用してインターフェイスを提供できますが、ローカルで実行されるため、システムに完全にアクセスできます。

これらはすべて、Windows98以降のすべてのWindowsコンピューターに含まれているWindowsScriptingHostおよびActiveScriptingテクノロジに基づいています。かなり強力な基本言語に加えて、広範なシステムおよびネットワーク情報と管理のためのWMIへのアクセスも提供します。 Word、Excelなどを自動化するためのCOM機能。また、Accessがインストールされていない場合でも、ADOおよびADOXを使用してAccessMDBファイルを作成および操作できます。

于 2009-10-02T19:33:44.417 に答える
2

JScriptはVBScriptよりもはるかに恐ろしい言語ではありませんが、問題は、VB Scriptに、日付や数値の書式設定などに役立つ関数のより完全なライブラリが組み込まれていることです。したがって、JScriptで使用するヘルパーオブジェクトの独自のライブラリを作成してインストールできない限り、実際には最初に表示されるほど簡単な選択ではありません。

ここにいくつかの詳細

于 2009-10-02T19:56:47.350 に答える