【问题标题】:running .bat file with javascript on html在 html 上使用 javascript 运行 .bat 文件
【发布时间】:2012-06-07 23:12:37
【问题描述】:

当用户点击网页上的链接时,我需要运行一个 .bat 文件。 .bat 文件基本上运行另一个可执行文件并将其输出保存在文本文件中。所以我想要的是在用户单击网页上的 .bat 文件的链接后创建该文本文件。现在,当我单独执行它时,我的 .bat 文件运行良好,它会创建包含内容的文本文件,但不知何故,当我单击链接时,它会创建一个空文本文件。我看了看所有的路径,它们都很好; 我在用 批处理文件, 我也试过 函数 runApp(which) { WshShell = new ActiveXObject("WScript.Shell"); WshShell.Run (which,1,true); } 但他们都只是创建文本文件,而不是放内容

有没有人对此有任何想法,还有其他方法可以做到这一点,比如运行原始 .bat 文件,然后直接使用 html/javascript 将其输出到文本文件中?

感谢任何帮助 谢谢

【问题讨论】:

  • 你知道这在即使是中等安全的系统上也行不通?
  • 这应该在mac和linux系统上工作吗?

标签: javascript html


【解决方案1】:

你没有说你正在使用什么环境,我猜你不是在使用服务器端环境。 JavaScript 通常在浏览器中工作以响应用户的点击和鼠标移动等,但严格在浏览器的范围内。您要做的是在浏览器正在运行的底层操作系统(如果您在本地运行)或在普通网页环境中的服务器端操作系统上执行 I/O 操作。这不仅仅是一个安全问题——JavaScript 与客户端操作系统或服务器端操作系统没有任何直接连接。

您需要的是像 Apache 或 IIS 等这样的 Web 服务器环境,可能运行像 ASP.NET、JSP、PHP(带有像 CodeIgniter 这样的好框架)这样的环境,或者,而不是我,CGI。

用户单击链接或提交按钮,并向服务器发送请求。相关的服务器端程序处理请求,运行您所说的 I/O 操作并以文本响应。 JavaScript 在大部分过程中都无关紧要。只有当您试图弄清楚如何以某种奇特的动态方式显示响应时,它才会再次出现。

那里有数百万个教程:

说了这么多,有一个服务器端的 JavaScript 环境 (http://nodejs.org/) 但关键是你总是会受到 http 协议的限制,这意味着你发送一个请求到服务器,服务器根据您作为客户端的权限处理您的请求,在适当的情况下执行 I/O 操作,并以 HTML 流响应。它不允许在服务器上直接操作。

这一切都不容易。预计会有陡峭的学习曲线。

显示文本文件内容

这是一个示例 JSP 页面,它将读取文本文件的内容,然后将其显示在网页上。我没有添加任何按钮或任何东西——它只是演示了如何读取服务器上的文件:

<%@page contentType="text/html" pageEncoding="UTF-8" import="java.io.*"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>BufferedReader</title>
</head>
<body>
    <%
    String path = this.getServletContext().getRealPath("/target/message.txt");
    File file = new File(path);
    FileReader reader = new FileReader(file);
    BufferedReader br = new BufferedReader(reader);
    while(br.ready()){
        out.print(br.readLine() + "<BR>");
    }
    reader.close();
    %>
</body>
</html>

/target/message.txt 是虚拟绝对路径(从 webapp 的根目录开始)。对getRealPath 的调用是您获取真实物理路径的方式,该路径允许您创建文件对象。

稍后我会看看使用exec 运行批处理文件,但现在您正在考虑像Java 这样功能强大的语言/库,为什么要运行批处理文件?用Java写程序不是很有意义吗?

【讨论】:

  • 所以我在 JAVA 中尝试这个,我正在这样做: Runtime.getRuntime().exec("cmd /c start test.bat");但它仍然没有创建包含内容的文本文件,只是一个空文本文件:(
  • Shaleen,我还在猜测你所处的环境。你是想从命令行运行它还是什么?无论发生什么,如果您想通过单击网页来启动所有这些操作,您需要安装 Tomcat,即 JSP 网络服务器环境。然后创建一个带有可点击按钮的合适网页,该按钮向服务器提交请求。在 Tomcat 服务器端,您需要调用 exec 来运行 .bat 文件并检索文本文件的内容。今天我正在玩显示页面,我将添加到答案中。
  • 您好,非常感谢您的帮助。我目前正在使用客户端环境。我不能为此编写Java代码。基本上,问题是我有一个软件,它有一个 .bat 文件,可以创建一些东西的报告。所以我需要做的是获取该报告并在网页或窗口上以表格格式显示它。所以我想做的是运行 .bat 文件,在文本文件或某些输入流中获取其内容,然后进行解析,我使用的是 HTML 和 JavaScript。
  • 但是正如你所说,JavaScript 无法运行并保存 .bat 文件的输出,这就是为什么现在我不确定使用哪种语言...我什至尝试像 Java 应用程序一样创建,但又一次我可以运行 .bat 文件,但无法获取/保存输出。可能是因为那个 .bat 文件调用了另一个 .bat 文件??再次感谢!!
  • 首先,您必须在脑海中将浏览器中的客户端活动与服务器端活动区分开来,否则您将陷入困境。例如,安装具有内置 Tomcat 的最新版本的 Netbeans,做一些关于它如何工作的基本教程,然后你可能有机会继续前进。与其说是语言问题,不如说是了解这些语言可以在哪里运作。
【解决方案2】:

使用 node.js 的 child_process.spawn

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 2023-03-27
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2014-01-18
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多