java - 从 Windows 批处理文件中自行删除 jar

标签 java windows batch-file jar cmd

我有一个 Java 应用程序,它应该通过在线下载新版本来 self 更新,然后它应该 self 删除,我已经管理了更新,现在我需要删除旧的 jar 文件。 由于我的应用程序将只在 Windows 上运行,我想我可以使用 bat 文件,所以我编写了创建批处理文件的代码,该批处理文件应该关闭 JVM(这样 jar 文件就不会被锁定)然后它应该删除jar文件,然后它应该删除bat文件(bat文件应该能够 self 删除)。 代码是这样的:

String pat = new File("delete.bat").getAbsolutePath();
FileWriter fw = new FileWriter(pat);
PrintWriter pw = new PrintWriter(fw);
pw.println("taskkill /F /IM \"java.exe\"");
pw.println("DEL /F \""+ jarname +"\"");
pw.println("DEL /F \"delete.bat\"");
pw.close();
System.out.println("cmd /c START \"\" \"" + pat + "\"");
Runtime.getRuntime().exec("cmd /c START \"\" \"" + pat + "\"");

实际上效果还不错,它删除了 jar 和 bat 但是...删除后仍然打开命令提示符,这真的很难看:/ 我什至尝试在 DEL/F“delete.bat”之后放置 exit,但由于 bat 已被删除,因此无法读取 exit 命令... 关于如何关闭提示的一些想法?

最佳答案

您可以通过两种方式关闭命令提示符

  1. 在 bat 脚本的最后一行添加 Exit pw.println("退出");
  2. 使用 start 而不是 cmd 启动 CMD

    Runtime.getRuntime().exec("开始\"\"\""+ pat + "\"");

关于java - 从 Windows 批处理文件中自行删除 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30368534/

相关文章:

java - rxjava2 observable.just(a Boolean) 不是

java - GcmListenerService.onMessageReceived() 未调用

python - 如何确定传递给命令行的字符串子进程?

java - 如何从java运行批处理文件?

java - 我如何在没有 firebase、socket.io、pubnub 的情况下创建聊天应用程序?

java - 将所有字符串字段更改为大写

c# - 预加载 WPF 窗口(可能在其他线程中)以提高性能

windows - Docker Toolbox Windows登录quay.io

mysql - 如何使用批处理脚本将.txt 文件中的数据放入 mysql 数据库?

browser - 批处理文件在新的浏览器窗口中打开选项卡