当前位置:编程学习 > JAVA >>

求大神,急急急!!!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 Java 2 SDK 环境参数设置完毕,正常退出。
 
   @echo off
pause
--------------------编程问答-------------------- echo 要先on后off,另外加一个pause --------------------编程问答--------------------
引用 8 楼 oh_Maxy 的回复:
我试了下,可以执行啊:
    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 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就可以了。 --------------------编程问答--------------------
引用 11 楼 shnulaa 的回复:
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继续执行下去。。。。。 --------------------编程问答--------------------
引用 12 楼 wei1151405081 的回复:
Quote: 引用 11 楼 shnulaa 的回复:

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里面的啊。 --------------------编程问答--------------------  

引用 19 楼 wei1151405081 的回复:
谢谢你啊。我想可能是因为调用命令层次太多的元原因。我用java执行了一个bat,bat中调用了一个外部命令(delete_product.pl),在delete_product.pl命令中又执行了一个最终的命令。最后一个命令才需要输入确认信息的。这样管道就传不过去了。但是问什么我双击bat就能执行呢?毕竟管道是写在bat里面的啊。

试试在java中用 call来执行 防火墙之类的关了 还可以试试at at应该可移植性。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,