java 执行bat脚本,并监控执行结果

亲测可用
直接上工具类的代码:

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class NoteUtil {

    /**
     * 执行bat脚本文件,弹出cmd黑窗
     * @param command 执行脚本文件命令
     * @param navigatePath 脚本文件所在文件夹地址
     */
    public static void runExecution(List<String> command, File navigatePath) {

        System.out.println(command);

        ProcessBuilder executeProcess=new ProcessBuilder(command);
        executeProcess.directory(navigatePath);
        try {
            Process resultExecution = executeProcess.start();
        }catch (Exception e){

        }
    }

    /**
     * 执行bat脚本,读取cmd输出内容
     * 注意:按行执行的,所以需要注意脚本编写的时候一条命令需要写进一行中,而且还要注意执行命令时所在的文件夹地址,如果是需要在特定文件夹下执行的命令,则需要每行命令开始时跳转到该目录
     * @param batPath 执行的脚本文件绝对路径
     */
    public static Map<String, String> runExecution2(String batPath) {
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = new StringBuffer();
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(batPath), "UTF-8"));//读取脚本
            String line;
            List<String> batList = new ArrayList();
            while ((line = br.readLine()) != null) {
                if (!line.equals("")) {
                    batList.add(line);
                }
            }
            for (String command : batList) {
                Process pro = Runtime.getRuntime().exec("cmd /c " + command);
                BufferedReader br1 = new BufferedReader(new InputStreamReader(pro.getInputStream(), "GBK"));
                BufferedReader br2 = new BufferedReader(new InputStreamReader(pro.getErrorStream(), "GBK"));
                System.out.println("Input Stream:");
                while ((line = br1.readLine()) != null) {
                    System.out.println(line);
                    sb1.append(line).append(System.getProperty("line.separator"));
                }
                System.out.println("Error Stream:");
                while ((line = br2.readLine()) != null) {
                    System.out.println(line);
                    sb2.append(line).append(System.getProperty("line.separator"));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            Map map = new HashMap();
            map.put("getInputStreamString", sb1.toString());
            map.put("getErrorStreamString", sb2.toString());
            return map;
        }
    }


    public static void main(String[] args) {
        //cmd弹窗
        File jsFile=new File("D:\\application\\bat文件所在的目录");

        String cmdPrompt="cmd";
        String type="/c";
        String start = "start";
        String bat="run.bat";


        List<String> updateCommand=new ArrayList<String>();
        updateCommand.add(cmdPrompt);
        updateCommand.add(type);
        updateCommand.add(start);
        updateCommand.add(bat);

        runExecution(updateCommand,jsFile);

        //不需要弹窗,获得命令执行后的输入流,打印执行结果
        System.out.println(runExecution2("D:\\application\\脚本文件绝对路径.bat"));
    }

}
在测试的发现,如果弹窗来执行bat脚本,那么java代码中获取到的输入流中是空的

bat脚本使用 && 对两条语句进行拼接,语句拼接的时候注意注释,以免脚本都拼接到注释后面去了导致执行不到
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以在 Windows 操作系统中编写一个批处理脚本(.bat 文件),然后使用 Windows 自带的任务计划程序来定时启动该脚本,实现对 Java 进程的监控和拉起。具体步骤如下: 1. 编写批处理脚本 在记事本等文本编辑器中新建一个文件,将以下代码复制进去: ``` @echo off setlocal if not "%1"=="" ( set JAVA_HOME=%1 ) else ( set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191 ) set CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar; set PATH=%JAVA_HOME%\bin;%PATH% set MAIN_CLASS=com.example.Main set ARGS= :loop for /f "tokens=1,2" %%a in ('jps -m ^| findstr %MAIN_CLASS%') do ( set PID=%%a set CMD=%%b goto found ) :start echo [%time%] %MAIN_CLASS% is not running, starting... start java %MAIN_CLASS% %ARGS% goto loop :found echo [%time%] %MAIN_CLASS% is running with PID %PID% echo [%time%] %CMD% timeout /t 10 > nul goto loop ``` 其中,`set JAVA_HOME` 指定 Java 的安装路径,`set MAIN_CLASS` 指定要监控Java 主类,`set ARGS` 可以指定 Java 程序的运行参数。 2. 设置任务计划程序 按下 Windows+R 键打开运行对话框,输入 `taskschd.msc` 打开任务计划程序。在左侧的面板中,选择“任务计划程序库”,然后在右侧的面板中,点击“创建任务”。 在“常规”选项卡中,输入任务名称和描述,选择“使用最高权限运行”,并勾选“不与用户会话相关”。 在“触发器”选项卡中,点击“新建”,设置计划的触发方式,例如定时启动、开机启动等。 在“操作”选项卡中,点击“新建”,选择要执行的程序为批处理脚本文件(.bat),并设置起始路径为批处理文件所在的目录。 在“条件”选项卡中,可以设置任务的执行条件,例如只有在电源适配器插入时才执行任务等。 3. 启动任务 完成所有设置后,点击“确定”保存任务。然后在任务计划程序中找到该任务,右键点击“运行”即可手动启动程序。如果一切正常,任务计划程序会按照设置的时间自动启动批处理脚本,对 Java 进程进行监控和拉起。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值