有没有办法在 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 中进入睡眠状态?