6

cscript.exe で実行される JScript プログラムを作成しています。スクリプト内からコマンド ライン コマンドを実行することは可能ですか。同じことをするためにjscriptでコードをさらに書く代わりに、特定のコマンドを実行できるので、仕事が本当に簡単になります。


例: 10 秒間キーが押されるのを待つために、timeout コマンドをすぐに使用できます。

timeout /t 10

これを jscript で実装すると、より多くの作業が必要になります。ところで、私は Vista と WSH v5.7 を使用しています

何か案は?ありがとう!

4

3 に答える 3

8

WshShell.Run次の方法を使用してDOSコマンドを実行できます。

var oShell = WScript.CreateObject("WScript.Shell");
oShell.Run("timeout /t 10", 1 /* SW_SHOWNORMAL */, true /* bWaitOnReturn */);


キーが押されるかタイムアウトが経過するまでスクリプトの実行を一時停止する必要がある場合は、次のWshShell.Popup方法(タイムアウトオプション付きのダイアログボックス)を使用してこれを実行できます。

var oShell = WScript.CreateObject("WScript.Shell");
oShell.Popup("Click OK to continue.", 10);

ただし、このメソッドは、cscriptで実行する場合にもメッセージボックスを表示します。

別の可能なアプローチについては、この記事で説明しています。スクリプトを一時停止して、ユーザーがキーボードのキーを押したときに再開するにはどうすればよいですか。つまり、WScript.StdInプロパティを使用して入力ストリームから直接読み取り、この方法で入力を待つことができます。ただし、入力ストリームからの読み取りはタイムアウトをサポートせず、ENTERキーを押したときにのみ戻ります(キーはありません)。とにかく、念のため、ここに例を示します。

WScript.Echo("Press the ENTER key to continue...");

while (! WScript.StdIn.AtEndOfLine) {
   WScript.StdIn.Read(1);
}
于 2009-09-18T06:31:41.920 に答える
1

助けてくれた人に感謝します。これは私の最初の投稿で、stackoverflow は最高です! また、メソッドを使用して、このことを行う別の方法を見つけましたoShell.SendKeys()
方法は次のとおりです。

var oShell = WScript.CreateObject("WScript.Shell");
oShell.SendKeys("cls{enter}timeout /t 10{enter}");

このようにして、新しいプロセスやウィンドウを生成することなく、ほぼすべての dos コマンドを実行できます。

編集: 問題は解決しているように見えますが、このコードはあまり信頼できません。以下のコメントを参照してください

于 2009-09-18T07:30:34.563 に答える
0

はい、WScript.Shellオブジェクトを使用します。

ドキュメントとサンプルを参照してください

于 2009-09-18T00:53:06.707 に答える