在我的Java应用程序中,我想运行一个调用"scons -Q implicit-deps-changed build\file_load_type export\file_load_type"的批处理文件

似乎我甚至无法执行我的批处理文件。 我没有想法。

这就是我在Java中所拥有的:

Runtime.

getRuntime().

exec("build.bat", null, new File("."));

以前,我有一个我想运行的Python Sconscript文件,但由于这不起作用,我决定通过批处理文件调用脚本,但该方法尚未成功。

批处理文件不是可执行文件。他们需要一个应用程序来运行它们(即cmd)。

在UNIX上,脚本文件在文件的开头有shebang(#!),用于指定执行它的程序。双击Windows是由Windows资源管理器执行的。 CreateProcess对此一无所知。

Runtime.

getRuntime().

exec("cmd /c start "" build.bat");

注意:使用start \"\"命令,将打开一个单独的命令窗口,其中包含空白标题,批处理文件中的任何输出都将显示在那里。它也应该只使用`cmd / c build.bat",在这种情况下,如果需要,可以从Java中的子进程读取输出。

对我而言,它说Windows无法找到"build.bat"。那么我应该把这个文件放在哪里?或者我应该如何给出路径。有什么建议?

假设我有一个命令数组,然后迭代该数组以执行所有命令(i = 0到commands.length){Runtime.getRuntime()。exec("cmd / c start buil.bat");然后对于每次迭代(对于每个命令),命令窗口都会被打开,这很明显。如何避免我的意思是在一个窗口上执行所有命令。

我们有一些代码直接调用"gradlew.bat"而不在其前放置"cmd / c"内容,并且该代码以某种方式工作。所以我猜Java或Windows在某些方面解决了部分问题。如果我们试图执行"gradlew",那就失败了,所以很明显仍然需要".bat"。

Win+R(运行时)可以直接执行批处理文件。

有时线程执行进程时间高于JVM线程等待进程时间,它会在您调用的进程需要一些时间进行处理时发生,请使用waitFor()命令,如下所示:

try{

Process p = Runtime.getRuntime().exec("file location here, don't forget using / instead of \\ to make it interoperable");

p.waitFor();

}catch( IOException ex ){

//Validate the case the file can't be accesed (not enought permissions)

}catch( InterruptedException ex ){

//Validate the case the process is being stopped by some external situation

}

这样,JVM将停止,直到您正在调用的进程在继续执行线程执行堆栈之前完成。

Runtime runtime = Runtime.getRuntime();

try {

Process p1 = runtime.exec("cmd /c start D:\\temp\\a.bat");

InputStream is = p1.getInputStream();

int i = 0;

while( (i = is.read() ) != -1) {

System.out.print((char)i);

}

} catch(IOException ioException) {

System.out.println(ioException.getMessage() );

}

评论此代码并告诉我们为什么以及InputStream正在阅读的内容以及我关心的原因将会很有用。此外,批处理文件的代码运行良好,但我不能让它引发错误异常。

在我的代码中,有一个令人困惑的变量名称为"is",这让我很难过。

我假设他想打印脚本的输出....

如果您正在谈论的话,使用java运行批处理文件...

String path="cmd /c start d:\\sample\\sample.bat";

Runtime rn=Runtime.getRuntime();

Process pr=rn.exec(path);`

这应该做到这一点。

已经用一个有效的解决方案回答了这个问题。您应该只提供您知道正在运行的解决方案,并描述您认为解决方案可能更好的原因。

ProcessBuilder是运行外部进程的Java 5/6方式。

为什么ProcessBuilder成为Java 5/6的发展方向?

复活旧帖子的有趣选择... ProcessBuilder提供更多控制,特别是能够轻松地将stderr重定向到stdout。我也发现设置更直观,但这是个人的首选

用于运行批处理脚本的可执行文件是cmd.exe,它使用/c标志指定要运行的批处理文件的名称:

Runtime.getRuntime().exec(new String[]{"cmd.exe","/c","build.bat"});

从理论上讲,你也应该能够以这种方式运行Scons,尽管我没有测试过这个:

Runtime.getRuntime().exec(new String[]{"scons","-Q","implicit-deps-changed","build\file_load_type","export\file_load_type"});

编辑:阿马拉,你说这不起作用。您列出的错误是从Windows框上的Cygwin终端运行Java时出现的错误;这是你在做什么的?问题是Windows和Cygwin有不同的路径,因此Windows版本的Java将无法在Cygwin路径上找到scons可执行文件。如果事实证明这是你的问题,我可以进一步解释。

谢谢。它仍然不起作用 - 这段代码甚至不在我的应用程序中执行。我会尝试你提出的其他选项。再次感谢。

当我尝试第二种替代方法时它给了我这个错误:线程"main"中的异常java.io.IOException:无法运行程序"scons":CreateProcess error = 2,系统找不到指定的文件

不,我没有Cygwin终端。我使用Windows Command终端。这很奇怪 - 我不知道它为什么不起作用。这完全让我感到困惑。

Process p = Runtime.getRuntime().exec(

new String[]{"cmd","/C","orgreg.bat"},

null,

new File("D://TEST//home//libs//"));

用jdk1.5和jdk1.6测试

这对我来说很好,希望它也能帮助别人。

为了得到这个,我已经挣扎了更多的日子。 :(

add this ==> BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = reader.readLine(); while(line!= null){System.out.println(line); line = reader.readLine(); }

我遇到过同样的问题。但有时CMD无法运行我的文件。

这就是我在桌面上创建temp.bat的原因,接着这个temp.bat将运行我的文件,然后临时文件将被删除。

我知道这是一个更大的代码,但是在Runtime.getRuntime()。exec()失败的情况下100%工作。

// creating a string for the Userprofile (either C:\Admin or whatever)

String userprofile = System.getenv("USERPROFILE");

BufferedWriter writer = null;

try {

//create a temporary file

File logFile = new File(userprofile+"\\Desktop\\temp.bat");

writer = new BufferedWriter(new FileWriter(logFile));

// Here comes the lines for the batch file!

// First line is @echo off

// Next line is the directory of our file

// Then we open our file in that directory and exit the cmd

// To seperate each line, please use

writer.write("cd %ProgramFiles(x86)%\\SOME_FOLDER

start xyz.bat

exit");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

// Close the writer regardless of what happens...

writer.close();

} catch (Exception e) {

}

}

// running our temp.bat file

Runtime rt = Runtime.getRuntime();

try {

Process pr = rt.exec("cmd /c start "" ""+userprofile+"\\Desktop\\temp.bat" );

pr.getOutputStream().close();

} catch (IOException ex) {

Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);

}

// deleting our temp file

File databl = new File(userprofile+"\\Desktop\\temp.bat");

databl.delete();

以下工作正常:

String path="cmd /c start d:\\sample\\sample.bat";

Runtime rn=Runtime.getRuntime();

Process pr=rn.exec(path);

/ c的含义是什么?

要扩展@ Isha的anwser,您可以执行以下操作以获取运行的脚本的返回输出(事后不在rea-ltime中):

try {

Process process = Runtime.getRuntime().exec("cmd /c start D:\\temp\\a.bat");

System.out.println(process.getText());

} catch(IOException e) {

e.printStackTrace();

}

此代码将执行路径C:/ folders /文件夹中存在的两个commands.bat。

Runtime.getRuntime().exec("cd C:/folders/folder & call commands.bat");

java 运行批处理文件_如何从Java应用程序运行批处理文件?相关推荐

  1. java 异常机制_深入理解Java异常处理机制

    一.引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中 ...

  2. java 02-cf_cf活动如何设置java环境变量_如何设置java环境变量

    cf助手怎么连接wifi_连接无线网设置 对于刚刚学习java的win7用户来说,首先要学会安装jdk和配置java环境变量,这是学习java的唯一途径,否则编写的代码运行时会出现bug.关于这一点, ...

  3. java 字符串乱码_这份Java面试题含答案解析竟然真的让你不用在面试上“如履薄冰”...

    面试题集共分为以下十部分: 一.Core Java: 1 - 95 题1 - 24 页 基础及语法: 1 - 61 题1 - 13 页 异常: 62 - 69 题13 - 15 页 集合: 70 - ...

  4. java内置_自包含的应用程序,内置Java

    我已经看过几篇在Java 9中简要提到自包含应用程序的在线演示文稿,但我有一个问题需要我解决. 使用新模块系统,您现在只允许包含运行应用程序所需的最少代码.但是,希望运行应用程序的系统是否仍需要JRE ...

  5. futuretask java 并发请求_图文并茂理解 Java 多线程

    优质文章,及时送达 线程 线程的概念,百度是这样解释的: 线程(英语:Thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的 ...

  6. java for循环_愉快地学Java语言:第五章 循环

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...

  7. java 鉴权_我爱java系列之---【JWT实现微服务鉴权(一)】

    JWT介绍 JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 一个JWT实际上就是一个字符串,它由三部分组成,头部.载荷与签 ...

  8. java 内存空间_怎样用java实现存储空间动态分配

    1.java是如何管理内存的 Java的内存管理就是对象的分配和释放问题.(两部分) 分配 :内存的分配是由程序完成的,程序员需要通过关键字new 为每个对象申请内存空间 (基本类型除外),所有的对象 ...

  9. linux java远程调试_[转]JPDA:Java平台调试架构(常用的远程调试方法)

    原文出处:http://www.javaeye.com/topic/75128 最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPD ...

最新文章

  1. Target runtime Apache Tomcat 6.0 is not defined
  2. centos yum 重新配置dns
  3. 基于逆向最大化词表中文分词法zz
  4. [html] 字体图标加载出来成了小方块,是什么原因呢?如何解决?
  5. JScharts快速入门
  6. Android 出现警告Exported service does not require permission
  7. C++面试题:list和vector有什么区别?
  8. Visual C++ 2011-5-18
  9. 在VC6.0中使用GDI+的两种办法
  10. Extjs 屏蔽F5
  11. 高性能迷你React框架anujs1.0.8发布
  12. java实现文件的复制
  13. VS2017 CUDA编程学习实例1:CUDA实现向量点乘
  14. 为什么要写技术博客?
  15. 64qam带宽计算_滚降系数为0.5的64QAM信号,数据速率若为_____,则带宽为______。
  16. 【视频剪辑】Pr剪切素材时常用快捷键及素材快进快退
  17. python生成随机中文_随机字生成器-Python
  18. 英国留学经验分享:发下呆会被拒 有特长受欢迎
  19. 某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1、5、1、3、5、2、4、1、2,出现缓存直接命中的次数是(),最后缓存中即将准备淘汰的数据项是()
  20. R Markdown 如何使用外部css

热门文章

  1. 运算符优先级,对象深拷贝
  2. 求1900到2017的闰年天数
  3. 红绿灯的人工智能需求
  4. Mission Planner初学者安装调试教程指南(APM或PIX飞控)6——富斯i6通过mission planner设置飞行模式(结合二挡三挡开关设置六种飞行模式)及主要飞行模式简介
  5. 一键批量导出好友联系方式
  6. 如何将多个PDF合并成一个文件
  7. pythonev3-二阶解魔方程序
  8. 详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::BackgroundSubtractorKNN,并利用它实现对道路监控视频前景/背景的提取
  9. WEB前端程序员找工作跳槽简历该怎么写?
  10. 剪辑必备神器,视频片段搜索工具!