Java 執(zhí)行CMD命令或執(zhí)行BAT批處理
背景
日常開發(fā)中總能遇到一些奇怪的需求,例如使用java執(zhí)行cmd命令或者bat批處理文件,今天就簡單記錄一下使用過程。
使用
廢話不多說直接上代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
import java.io.BufferedReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; public class Cmder { /** * 執(zhí)行一個cmd命令 * * @param cmdCommand cmd命令 * @return 命令執(zhí)行結(jié)果字符串,如出現(xiàn)異常返回null */ public static String executeCmdCommand(String cmdCommand) { StringBuilder stringBuilder = new StringBuilder(); Process process = null ; try { process = Runtime.getRuntime().exec(cmdCommand); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream(), "GBK" )); String line = null ; while ((line = bufferedReader.readLine()) != null ) { stringBuilder.append(line).append( " " ); } return stringBuilder.toString(); } catch (Exception e) { e.printStackTrace(); return null ; } } /** * 執(zhí)行bat文件, * * @param file bat文件路徑 * @param isCloseWindow 執(zhí)行完畢后是否關(guān)閉cmd窗口 * @return bat文件輸出log */ public static String executeBatFile(String file, boolean isCloseWindow) { String cmdCommand = null ; if (isCloseWindow) { cmdCommand = "cmd.exe /c " + file; } else { cmdCommand = "cmd.exe /k " + file; } StringBuilder stringBuilder = new StringBuilder(); Process process = null ; try { process = Runtime.getRuntime().exec(cmdCommand); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream(), "GBK" )); String line = null ; while ((line = bufferedReader.readLine()) != null ) { stringBuilder.append(line).append( " " ); } return stringBuilder.toString(); } catch (Exception e) { e.printStackTrace(); return null ; } } /** * 執(zhí)行bat文件,新開窗口 * * @param file bat文件路徑 * @param isCloseWindow 執(zhí)行完畢后是否關(guān)閉cmd窗口 * @return bat文件輸出log */ public static String executeBatFileWithNewWindow(String file, boolean isCloseWindow) { String cmdCommand; if (isCloseWindow) { cmdCommand = "cmd.exe /c start" + file; } else { cmdCommand = "cmd.exe /k start" + file; } StringBuilder stringBuilder = new StringBuilder(); Process process; try { process = Runtime.getRuntime().exec(cmdCommand); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream(), "GBK" )); String line; while ((line = bufferedReader.readLine()) != null ) { stringBuilder.append(line).append( " " ); } return stringBuilder.toString(); } catch (Exception e) { e.printStackTrace(); return null ; } } /** * 執(zhí)行bat腳本 * * @param batScript 腳本內(nèi)容 * @param location 腳本存儲路徑 * @return 結(jié)果 */ public static String executeBatScript(String batScript, String location) { StringBuilder stringBuilder = new StringBuilder(); FileWriter fw = null ; try { //生成bat文件 fw = new FileWriter(location); fw.write(batScript); fw.close(); } catch (IOException e) { e.printStackTrace(); } Process process; try { process = Runtime.getRuntime().exec(location); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream(), "GBK" )); String line; while ((line = bufferedReader.readLine()) != null ) { stringBuilder.append(line).append( " " ); } return stringBuilder.toString(); } catch (Exception e) { e.printStackTrace(); return null ; } } /** * 執(zhí)行腳本,不停止,并輸出執(zhí)行結(jié)果 * * @param batScript 腳本內(nèi)容 * @param location bat文件生成地址 */ public void executeBatScriptAlways(String batScript, String location) { FileWriter fw = null ; try { //生成bat文件 fw = new FileWriter(location); fw.write(batScript); fw.close(); } catch (IOException e) { e.printStackTrace(); } StringBuilder stringBuilder = new StringBuilder(); //運行bat文件 Process process; try { process = Runtime.getRuntime().exec(location); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream(), "GBK" )); String line; while ((line = bufferedReader.readLine()) != null ) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } |
Java 執(zhí)行系統(tǒng)命令
1. windows
1.1 cmd
第一種方法
1
2
3
4
5
6
7
8
9
10
11
12
|
File dir = new File( "D:\mysql57\mysql-5.7.29-winx64\bin" ); // String command="netstat -an"; String command = "c:\windows\system32\cmd.exe /c mysqlbinlog ../data/master-bin.000006 | more" ; Runtime r = Runtime.getRuntime(); Process p = r.exec(command, null , dir); BufferedReader br = new BufferedReader( new InputStreamReader(p.getInputStream())); StringBuffer sb = new StringBuffer(); String inline; while ( null != (inline = br.readLine())) { sb.append(inline).append( " " ); } System.out.println(sb.toString()); |
第二種方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
try { File dir = new File( "D:\mysql57\mysql-5.7.29-winx64\bin" ); //此處是指定路徑 String[] cmd = new String[] { "cmd" , "/c" , "mysqlbinlog -v ../data/master-bin.000006 | more" }; // cmd[2]是要執(zhí)行的dos命令 System.out.println(cmd[ 2 ]); Process process = Runtime.getRuntime().exec(cmd, null ,dir); // 記錄dos命令的返回信息 StringBuffer resStr = new StringBuffer(); // 獲取返回信息的流 InputStream in = process.getInputStream(); Reader reader = new InputStreamReader(in); BufferedReader bReader = new BufferedReader(reader); for (String res = "" ; (res = bReader.readLine()) != null ;) { resStr.append(res + " " ); } System.out.println(resStr.toString()); bReader.close(); reader.close(); process.getOutputStream().close(); // 不要忘記了一定要關(guān) } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } |
windows cmd 命令
后臺運行
1
2
|
start /b 程序名字 start /b redis-server.exe redis.windows.conf |
關(guān)閉程序
1
2
|
taskkill /f /t /im 程序名字 taskkill /f /t /im redis-server.exe |
查看進程
根據(jù)進程名稱 查看進程
1
|
tasklist|find /i "redis-server.exe" |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/y534560449/article/details/116232595