Runtime.getRuntime().exec()如何执行多条命令?

时间:2022-05-13 20:31:54
我使用
Runtime rt=Runtime.getRuntime();
Process prc=rt.exec("db2cmd db2 connect to ioa5 db2 get db cfg");
如此使用报错:未知的标志符db2,在执行完db2 connect to ioa5命令后,就失败了,用new String[]{"","",""}的方式执行是同样的问题
无奈,将
db2 connect to ioa5 
db2 get db cfg
做成一个bat文件db.bat,调用rt.exec("db2cmd c:\\db.bat");
执行成功。但是Process得不到了,无法获知Process何时完成,是否出现异常,输入输出流也得不到,
请问各位大虾,类似的问题如何解决?

11 个解决方案

#1


补充一下,判断exitValue,在db2cmd这句执行后就为0,所以判断exitValue没有作用

#2


在BAT里判断,如果成功返回0, 

#3


set RETCODE=0

执行命令1

set RETCODE=%errorlevel%

if not %RETCODE% == 0 goto END


执行命令2

set RETCODE=%errorlevel%

if not %RETCODE% == 0 goto END


执行命令3

set RETCODE=%errorlevel%

if not %RETCODE% == 0 goto END


:END
exit %RETCODE%

#4


还是执行一下batch文件吧  把要用的东东都写在batch里面 然后一起运行

#5


学习.

#6


应该还要waitFor()

#7


既然执行一条可以..

   那就多 exec() 几次么..虽然麻烦点.

#8


不懂 学习哈

#9


引用 3 楼 pauliuyou 的回复:
set RETCODE=0 

执行命令1 

set RETCODE=%errorlevel% 

if not %RETCODE% == 0 goto END 


执行命令2 

set RETCODE=%errorlevel% 

if not %RETCODE% == 0 goto END 


执行命令3 

set RETCODE=%errorlevel% 

if not %RETCODE% == 0 goto END 


:END 
exit %RETCODE%

up

#10


在卡住几天后,刚才突然找到了解决方法,贴上代码如下,给和我一样遇到同样问题的朋友:

      /** */ /** 
     * 执行批处理
     *  @param  command
     */ 
      public   void  runBat(String command)  {
            Process child  =   null ;
             try    {
                      Runtime rt =  Runtime.getRuntime();
                     child = rt.exec(command);
                        //以下代码为控制台输出相关的批出理
                      String line  =   null ;
                      BufferedReader reader  =   new  BufferedReader( new  InputStreamReader(child.getInputStream()));
                       while ((line  =  reader.readLine())  !=   null )
                        {
                          System.out.println(line);
                      } 
                      reader.close();
                      // 等待刚刚执行的命令的结束  
                     while  ( true )  { 
                         if (child.waitFor()  ==   0 )  break ;
                    }       
            } 
              catch  (Exception ex)  {
                   child.destroy();
                ex.printStackTrace();
            } 
        } 

  public   void  exportBat(String zipPath)  {
          // 执行批处是导出到目录下 
            this .runBat( " db2cmd -c -w -i exportdb.bat " );
          // 压缩文件生成打包 
             this.doZip(zipPath ,zipPath +" \\test .rar" ); 
            // 上传 
           this .ftpUp("目录");
          // 删除客户端目录生成的文件 
           this .delFile(zipPath );
    } 

#11


原文地址:http://www.blogjava.net/sojust/archive/2007/01/18/94253.html
感谢pauliuyou 的热心回复,结贴,给分呵呵

#1


补充一下,判断exitValue,在db2cmd这句执行后就为0,所以判断exitValue没有作用

#2


在BAT里判断,如果成功返回0, 

#3


set RETCODE=0

执行命令1

set RETCODE=%errorlevel%

if not %RETCODE% == 0 goto END


执行命令2

set RETCODE=%errorlevel%

if not %RETCODE% == 0 goto END


执行命令3

set RETCODE=%errorlevel%

if not %RETCODE% == 0 goto END


:END
exit %RETCODE%

#4


还是执行一下batch文件吧  把要用的东东都写在batch里面 然后一起运行

#5


学习.

#6


应该还要waitFor()

#7


既然执行一条可以..

   那就多 exec() 几次么..虽然麻烦点.

#8


不懂 学习哈

#9


引用 3 楼 pauliuyou 的回复:
set RETCODE=0 

执行命令1 

set RETCODE=%errorlevel% 

if not %RETCODE% == 0 goto END 


执行命令2 

set RETCODE=%errorlevel% 

if not %RETCODE% == 0 goto END 


执行命令3 

set RETCODE=%errorlevel% 

if not %RETCODE% == 0 goto END 


:END 
exit %RETCODE%

up

#10


在卡住几天后,刚才突然找到了解决方法,贴上代码如下,给和我一样遇到同样问题的朋友:

      /** */ /** 
     * 执行批处理
     *  @param  command
     */ 
      public   void  runBat(String command)  {
            Process child  =   null ;
             try    {
                      Runtime rt =  Runtime.getRuntime();
                     child = rt.exec(command);
                        //以下代码为控制台输出相关的批出理
                      String line  =   null ;
                      BufferedReader reader  =   new  BufferedReader( new  InputStreamReader(child.getInputStream()));
                       while ((line  =  reader.readLine())  !=   null )
                        {
                          System.out.println(line);
                      } 
                      reader.close();
                      // 等待刚刚执行的命令的结束  
                     while  ( true )  { 
                         if (child.waitFor()  ==   0 )  break ;
                    }       
            } 
              catch  (Exception ex)  {
                   child.destroy();
                ex.printStackTrace();
            } 
        } 

  public   void  exportBat(String zipPath)  {
          // 执行批处是导出到目录下 
            this .runBat( " db2cmd -c -w -i exportdb.bat " );
          // 压缩文件生成打包 
             this.doZip(zipPath ,zipPath +" \\test .rar" ); 
            // 上传 
           this .ftpUp("目录");
          // 删除客户端目录生成的文件 
           this .delFile(zipPath );
    } 

#11


原文地址:http://www.blogjava.net/sojust/archive/2007/01/18/94253.html
感谢pauliuyou 的热心回复,结贴,给分呵呵