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

Posted

技术标签:

【中文标题】有没有办法在 Windows Scripting Host (WSH) cscript.exe 中从 JScript(不是 javascript)运行命令行命令?【英文标题】:Is there a way to run a command line command from JScript (not javascript) in Windows Scripting Host (WSH) cscript.exe? 【发布时间】:2010-11-29 08:05:30 【问题描述】:

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


例如: 为了等待按键 10 秒,我可以直接使用 timeout 命令

timeout /t 10

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

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

您可以使用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);

【讨论】:

【参考方案2】:

感谢 ppl 的帮助,这是我的第一篇文章,*** 很棒! 另外,我想出了另一种方法来做这件事,使用 oShell.SendKeys() 方法。 方法如下:

var oShell = WScript.CreateObject("WScript.Shell");
oShell.SendKeys("clsentertimeout /t 10enter");

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

编辑:虽然它似乎解决了问题,但这段代码不是很可靠。请参阅下面的 cmets

【讨论】:

您的 SendKeys 字符串不正确 - 它应该是“clsentertimeout /t 10enter”(没有加号)。 另外,您的变体非常不可靠。首先,SendKeys 将击键发送到活动窗口,因此输入可能会发送到另一个意外激活的窗口。此外,如果SendKeys 之后有命令,则在SendKeys 之后不会执行这些命令。尝试在SendKeys 之前和之后插入WScript.Echo 命令并从输入字符串中删除cls - 您会看到脚本输出混乱,最后执行timeout 命令。 是啊..这段代码真的很乱!使用其余代码运行它后,我开始遇到问题,而且使用 SendKeys 时,语句不一定会在它们出现时执行。如果你有一个带有 SendKeys() 的 WScript.StdIn.Readline(),情况会变得更糟,因为它不会等待用户输入,因为它已经从 SendKeys 获得输入,而且它确实以令人讨厌的方式破坏了事情!经验教训:使用 SendKeys 时要非常小心,它可能是草率的伟大洞察力 helen!【参考方案3】:

是的,使用 WScript.Shell 对象。

See the docs and samples

【讨论】:

以上是关于有没有办法在 Windows Scripting Host (WSH) cscript.exe 中从 JScript(不是 javascript)运行命令行命令?的主要内容,如果未能解决你的问题,请参考以下文章

定义了重复的system.web.extensions/scripting/scriptResourceHandler怎么办

错误代码: 0x800700b7 配置错误:定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节

IIS7部署 - 复制'system.web.extensions / scripting / scriptResourceHandler'部分

Python/Windows 10 - 有没有办法防止 Windows 10 计算机在 Python 中进入睡眠状态?

有没有办法在 Windows 中安装 therubyracer?

有没有办法在 Windows 中获取有关进程的详细信息?