我正在运行一个执行脚本的Java应用程序。相关代码是
String command [] = new String [2];
command[0] = "customSearch";
command[1] = query;
Process process = Runtime.getRuntime().exec(command);
此代码在Linux上运行,因为我在customSearch
目录中放置了一个名为/usr/bin
的脚本。以类似的方式,我在Windows中创建了一个名为customSearch.bat
的批处理文件,并确保它位于PATH
上。但是,这个Java代码在Windows上不起作用,因为“批处理文件本身不可执行”,因为this线程提到了。
为了让它在Windows上运行,我不得不说
command[0] = "cmd /c start customSearch";
但是,我不想这样做,因为这不适用于Linux。如何在不更改command[0]
的情况下在Windows上运行批处理文件?
答案 0 :(得分:4)
如果操作系统是Windows,您可以添加一个检查,然后执行custom-windows-batch-runner-snippet。
例如,我创建了一个简单的test.bat
文件,其中包含netstat
命令:
netstat
以下是我通过Java片段执行的方式:
String os = System.getProperty("os.name");
if (os.toLowerCase().indexOf("win") >= 0) {
command = new String[1];
command[0] = "test.bat";
Process process = Runtime.getRuntime().exec(command);
BufferedReader is = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = is.readLine()) != null) {
System.out.println(line);
}
}
这是控制台中的结果:
D:\workspace\SO>netstat
Active Connections
Proto Local Address Foreign Address State
TCP 127.0.0.1:19872 hp:49266 ESTABLISHED
TCP 127.0.0.1:49169 hp:49170 ESTABLISHED
TCP 127.0.0.1:49170 hp:49169 ESTABLISHED'
....
更好的是,您可以使用if
语句包装每个特定于操作系统的命令执行代码段。