求大神,急急急!!!JAVA调用bat时,使用echo答复命令中的提问,执行没生效。
生成的bat内容:@echo off
d:
cd d:\UGS\ClearanceDB_Work_Area
echo y | delete_product.pl T21
pause
exit
@echo on
执行语句如下:
String cmd = "cmd /c start d: \\delete_bat.bat" ;
Runtime rt = Runtime.getRuntime();
Process process = rt.exec(cmd);
疑问:
我用java执行bat时,传入的Y没有起作用。但是我直接双击bat时却执行成功了。请问这是什么原因?解决办法是什么?或者有没有其他的方法可以实现类似答复命令提示的功能?
Java 命令提示符 echo --------------------编程问答-------------------- 有没有人帮忙啊,跪求啊 --------------------编程问答-------------------- d: \\delete_bat.bat
中间多了个空格? --------------------编程问答-------------------- 不是这个原因啊,谢谢。这个是发帖的时候发错了:-! --------------------编程问答-------------------- 不是这个原因啊,谢谢。这个是发帖的时候发错了:-! --------------------编程问答-------------------- 不是这个原因啊,谢谢。这个是发帖的时候发错了:-! --------------------编程问答-------------------- 也在期待答案。 --------------------编程问答-------------------- 别沉啊,紧急着用。请教啊 --------------------编程问答-------------------- 我试了下,可以执行啊:
public static void main(String[] args)
{
String cmd = "cmd /c start D:\\java\\test_java\\test.bat" ;
Runtime rt = Runtime.getRuntime();
try
{
Process process = rt.exec(cmd);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我的test.bat
@echo on--------------------编程问答-------------------- echo 要先on后off,另外加一个pause --------------------编程问答--------------------
@echo Java 2 SDK 环境参数设置完毕,正常退出。
@echo off
pause
bat是能执行的,但是bat中使用echo答复后面的perl命令时出错了。我想直接答复“Y”的,不知道为什么总是不成功,提示“用户已停止”。同样的方法,把echo y | delete_product.pl T21句改为echo y | rmdir test /s 就能实现。 --------------------编程问答-------------------- 1 使用java process来执行
echo y| command
的时候确实是有问题,具体是什么原因导致,可能是由于管道什么的原因,具体也没有研究过。
2 使用echo y| 来写入管道,这种方法也不是很好,可以使用
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream(),CHAR_SET));
bw.write("y\r\n");
bw.flush();
bw.close();
主要拿到process的OutputStream,然后写入y\r\n就可以了。 --------------------编程问答--------------------
你说的很有道理,可我去实验的你方法没有成功啊,还是不能自动输入y。请给给例子号码?
另外,我需要获得process的InputStream来让bat继续执行下去。。。。。 --------------------编程问答--------------------
现在也不能给你答案,我可能需要试一下。 --------------------编程问答-------------------- 嗯,谢谢啊 --------------------编程问答-------------------- 在网上看了一下相关的,同时处理process的in和out流时,好像需要使用不同线程来完成 --------------------编程问答-------------------- 这边我以前做过一个例子的,你把邮箱发一下,我发给你。 --------------------编程问答-------------------- 好的,1151405081@qq.com。谢谢啊 --------------------编程问答-------------------- 已经发送了,你查收一下吧,可能对你有帮助。 --------------------编程问答-------------------- 谢谢你啊。我想可能是因为调用命令层次太多的元原因。我用java执行了一个bat,bat中调用了一个外部命令(delete_product.pl),在delete_product.pl命令中又执行了一个最终的命令。最后一个命令才需要输入确认信息的。这样管道就传不过去了。但是问什么我双击bat就能执行呢?毕竟管道是写在bat里面的啊。 --------------------编程问答--------------------
谢谢你啊。我想可能是因为调用命令层次太多的元原因。我用java执行了一个bat,bat中调用了一个外部命令(delete_product.pl),在delete_product.pl命令中又执行了一个最终的命令。最后一个命令才需要输入确认信息的。这样管道就传不过去了。但是问什么我双击bat就能执行呢?毕竟管道是写在bat里面的啊。
试试在java中用 call来执行 防火墙之类的关了 还可以试试at at应该可移植性。
补充:Java , Java SE