有没有办法在Windows Scripting Host(WSH)cscript.exe中从JScript(而不是javascript)运行命令行命令?

时间:2009-09-17 23:32:41

标签: command-line command javascript wsh

我正在编写一个在cscript.exe中运行的JScript程序。是否可以从脚本中运行commnad line命令。这真的会让工作变得简单,因为我可以运行某些命令,而不是在jscript中编写更多代码来做同样的事情。


例如: 为了等待按键10秒,我可以立即使用超时命令

timeout /t 10

在jscript中实现这意味着更多的工作。 顺便说一句,我在Vista和WSH v5.7

任何想法?感谢名单!

3 个答案:

答案 0 :(得分: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下运行时也会显示一个消息框。

本文描述了另一种可能的方法:How Can I Pause a Script and Then Resume It When a User Presses a Key on the Keyboard?简而言之,您可以使用WScript.StdIn属性直接从输入流中读取,这样就可以等待输入。但是,从输入流中读取不支持超时,仅在按ENTER键时返回(不是任何键)。无论如何,这是一个例子,以防万一:

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

while (! WScript.StdIn.AtEndOfLine) {
   WScript.StdIn.Read(1);
}

答案 1 :(得分:1)

thanx for help ppl,这是我的第一篇帖子,stackoverflow真棒! 另外,我想出了另一种使用oShell.SendKeys()方法做这件事的方法 这是如何:

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

这样您就可以运行几乎所有的dos命令而不会产生新的进程或窗口

编辑:虽然它似乎解决了这个问题,但这段代码并不是很可靠。请参阅以下评论

答案 2 :(得分:0)

是的,使用WScript.Shell对象。

See the docs and samples