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

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


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

timeout /t 10

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

有什么想法吗?谢谢!

【问题讨论】:

    标签: command-line command javascript wsh


    【解决方案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 的帮助,这是我的第一篇文章,stackoverflow 很棒! 另外,我想出了另一种方法来做这件事,使用 oShell.SendKeys() 方法。
      方法如下:

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

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

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

      【讨论】:

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

      是的,使用 WScript.Shell 对象。

      See the docs and samples

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-21
        • 2010-11-21
        • 2021-08-01
        • 2012-08-15
        • 2019-09-22
        • 2015-03-12
        • 1970-01-01
        相关资源
        最近更新 更多