【问题标题】:Run a bat file from javascript从 javascript 运行一个 bat 文件
【发布时间】:2017-03-23 20:04:54
【问题描述】:

我正在尝试使用 javascript 运行一个 bat 文件。我尝试过使用 powershell,但它似乎无法正常工作。这是我尝试过的代码:

var oShell = WScript.CreateObject("WScript.Shell");
oShell.Exec("D:");
oShell.Exec("cd dir");
oShell.Exec("start user.bat");

我也试过了:

var oShell = WScript.CreateObject("WScript.Shell");
oShell.Exec("start D:\dir\user.bat");

有时它会运行,有时我会收到“预期的十六进制数字”、“访问被拒绝”这些错误。 我真的很困惑。我要做的就是从 javascript 文件中执行一个 bat 文件。

有人知道怎么做吗?谢谢!

【问题讨论】:

    标签: javascript batch-file jscript wsh


    【解决方案1】:

    首先,JavaScript 没有任何操作系统服务。因此,您实际上指的是恰好用 JavaScript 编写的 Windows Script Host (WSH) 脚本。

    其次,start 不是可执行文件,而是内置于cmd.exe 中的命令。

    排除了混乱,听起来您想从 WSH 脚本执行 shell 脚本(批处理文件)。最简单的方法是这样的(这有点接近你已经尝试过的):

    var wshShell = new ActiveXObject("WScript.Shell");
    wshShell.Run("D:\\dir\\user.bat");
    

    要创建WshShell COM 对象引用(progid WScript.Shell),请使用new 关键字和ActiveXObject 构造函数。此外,您需要将 JavaScript 字符串中的反斜杠 (\) 加倍,因为 \ 会转义 JavaScript 字符串中的字符。

    【讨论】:

    • 谢谢!一开始我觉得它可能是斜线的东西,但它没有帮助,所以我认为不是它。但我想问题出在那个和“开始”命令上!非常感谢!
    • @Bill_Stewart 这就像一个魅力。但是,它需要“初始化并编写未标记为可安全执行脚本的 ActiveX 控件”才能启用。有时这个动作要求接受或拒绝。有没有什么方法可以在每个系统上每当这个 Shell 脚本运行时,都会要求这个警告?
    • 你是如何运行脚本的? (我的回答仅指由 cscript/wscript/mshta 执行的脚本,而不是在浏览器等其他上下文中执行的 JavaScript。)
    • @@Bill_Stewart ...嗨先生..你能告诉我一件事....那...我怎样才能从 exe 接收字符串返回到 javascript...有可能吗...?如果是的话......那我怎么能做到这一点......谢谢你..
    【解决方案2】:

    另外,检查以下版本可能会有所帮助;

    var runnableScript = exec('path_to.bat',
        (error, stdout, stderr) => {
            console.log(stdout);
            console.log(stderr);
            if (error !== null) {
                console.log(`exec error: ${error}`);
            }
        });
    

    【讨论】:

    • @paddotk 一定要包含child_process模块
    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 2010-11-09
    • 2012-03-08
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多