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

感谢 ppl 的帮助,这是我的第一篇文章,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 回答