Runtime.getRuntime().exec中命令含有括号问题
在写批量运行bat工具的时候。想起了之前写的定时小工具里面的运行方法。
使用Runtime.getRuntime().exec方法。
Runtime.getRuntime().exec("cmd /c start c:/test.bat")
这样就能够像dos窗体直接运行命令行一样。
getRuntime返回Runtime的实例化对象,exec方法是返回Process对象。
查看Process类能够发现:
The ProcessBuilder.start() and Runtime.exec methods create a native process and return an instance of a subclass of Process that can be used to control the process and obtain information about it. The class Process provides methods
for performing input from the process, performing output to the process, waiting for the process to complete, checking the exit status of the process, and destroying (killing) the process.
The methods that create processes may not work well for special processes on certain native platforms, such as native windowing processes, daemon processes, Win16/DOS processes on Microsoft Windows, or shell scripts.
方法创建了本地进程返回了Process子类的对象,用于控制进程并获取信息。Process类提供从进程输入。进程输出,进程等待结束和进程退出状态还有销毁(杀死)进程的方法。创建进程的方法对于本地平台的特殊进程可能无法较好地工作。如本地窗体进程,守护进程,微软Windows下的Win16/DOS 进程或shell脚本。
先在c盘写一个简单的test.bat。
echo aaaa
pause
然后是用java进行调用:
import java.io.IOException;
public class TestRuntime {
public static void main(String[] args) {
try {
Runtime.getRuntime().exec("cmd /c start c:\\test.bat");
} catch (IOException e) {
// TODO Auto-generated catch block\
System.out.println("file not found");
}
}
}
这样是正常运行的。
可是问题来了,当bat文件有括号的时候,运行就会不一样了,将原有的test.bat改为test(s).bat后运行。
后面看到了这篇博客,http://blog.sina.com.cn/s/blog_656977f40101d05p.html
可是博客里面也有错误,文件路径应该使用\\或者/。
Runtime.getRuntime().exec("cmd /c start call \"c:\\test(s).bat\"");
这样之后正常訪问,call正常调用了带括号bat文件。
事实上这个问题纠结了我非常久,确实有些命令并不能非常好的工作,一直就在解决问题。
可是我还好找到了这个问题的解决方式,不然仅仅会在这个问题上越陷越深,事实上当一个问题快到死角的时候,要从换种思路解决问题。
原来的思路:
如今问题是无法识别文件名称带有括号的bat文件——》怎样让exec方法识别到。
新思路:
如今问题是无法识别文件名称带有括号的bat文件——》能不能去掉bat文件名称中的括号。
事实上这个思路是由这位仁兄的博客里想到的:
http://blog.csdn.net/xulianboblog/article/details/18360131
不一样的解决这个问题的思路。
Runtime.getRuntime().exec中命令含有括号问题的更多相关文章
- 使用Runtime.getRuntime().exec()在java中调用python脚本
举例有一个Python脚本叫test.py,现在想要在Java里调用这个脚本.假定这个test.py里面使用了拓展的包,使得pythoninterpreter之类内嵌的编译器无法使用,那么只能采用ja ...
- Java Runtime.getRuntime().exec() 执行带空格命令
可执行文件路径如果包含空格,则在java中不能被获取到. 此时Debug一下,会发现 project=null. project.waitFor 的返回值为1.但是去源路径单击bat文件是可以正常运行 ...
- JAVA命令运行cmd命令得到的结果乱码Runtime.getRuntime().exec("");
Process process = Runtime.getRuntime().exec("cmd /c dir c:"); BufferedReader bufferedReade ...
- 用Runtime.getRuntime().exec()需要注意的地方
有时候我们可能需要调用系统外部的某个程序,此时就可以用Runtime.getRuntime().exec()来调用,他会生成一个新的进程去运行调用的程序. 此方法返回一个java.lang.Proce ...
- 使用Runtime.getRuntime().exec()方法的几个陷阱 (转)
Process 子类的一个实例,该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态以及销毁(杀掉)进程的方法. 创建进程的方法 ...
- 关于Runtime.getRuntime().exec()产生阻塞的2个陷阱
本文来自网易云社区 背景 相信做java服务端开发的童鞋,经常会遇到Java应用调用外部命令启动一些新进程来执行一些操作的场景,这时候就会使用到Runtime.getRuntime().exec(), ...
- [转]java调用外部程序Runtime.getRuntime().exec
Runtime.getRuntime().exec()方法主要用于执行外部的程序或命令. Runtime.getRuntime().exec共有六个重载方法: public Process exec( ...
- [转]使用Runtime.getRuntime().exec()方法的几个陷阱
Process 子类的一个实例,该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态以及销毁(杀掉)进程的方法. 创建进程的方法 ...
- 使用Runtime.getRuntime().exec()方法的几个陷阱
Process 子类的一个实例,该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.检查进程的退出状态以及销毁(杀掉)进程的方法. 创建进程的方法 ...
随机推荐
- 面试题之String str = new String("abc"); 创建了几个对象
今天去面试的时候碰到了这个问题:String str = new String("abc"); 创建了几个对象,回来自己研究并查阅资料才发现答错了..网上的争论不少,有的说是两个, ...
- JavaSE复习日记 : Java操作符\关系运算符\逻辑运算符\赋值运算符\字符串连接符\三元运算符
// Java操作符\关系运算符\逻辑运算符\赋值运算符\字符串连接符\三元运算符 /* * 一 Java操作符 * * Java操作符都有哪些? * +, -, *, /, %, ++, -- * ...
- Android应用开发基础篇(8)-----SurfaceView
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/25/2368069.html 一.概述 SurfaceView也是一个用来画图的部件,不过由于它 ...
- 设计模式(十一)代理模式Proxy(结构型)
1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供 ...
- tomcat管理员manager app无法进入解决方法
浏览器输入http://localhost:8080/进入tomcat页面后,点击manager app输入用户名(admin)密码(admin)后页面跳转出现如下错误:备注:tomcat7.0.39 ...
- jquery初学笔记
官方网站:http://jquery.com/ 一个简单的JQuery实例: <!DOCTYPE html> <html lang="en" xmlns=&quo ...
- php生成数据字典,代码
<?php /** * 生成mysql数据字典 */ header("Content-type:text/html;charset=utf-8"); // 配置数据库 $da ...
- javascript学习笔记(window .alert 是什么)
<script language="javascript"> var abc="25"; window .alert(abc); </scri ...
- php中 $$str 中 "$$" 的解释
原文:php中 $$str 中 "$$" 的解释 这种写法称为可变变量有时候使用可变变量名是很方便的.就是说,一个变量的变量名可以动态的设置和使用.一个普通的变量通过声明来设置,例 ...
- Json.Net系列教程 1.Json.Net介绍及实例
原文 Json.Net系列教程 1.Json.Net介绍及实例 本系列教程假设读者已经对Json有一定的了解,关于Json在这里不多说.本系列教程希望能对读者开发涉及到Json的.Net项目有一定的帮 ...