Ejecute comandos cmd a través de Java

Resuelto Reham asked hace 11 años • 15 respuestas

Encontré varios fragmentos de código para ejecutar comandos cmd a través de una clase Java, pero no pude entenderlos.

Este es el código para abrir el cmd.

public void excCommand(String new_dir){
    Runtime rt = Runtime.getRuntime();
    try {
        rt.exec(new String[]{"cmd.exe","/c","start"});

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Y encontré algunos otros enlaces para agregar otros comandos como cd http://www.coderanch.com/t/109753/Linux-UNIX/exec-command-cd-command-java

¿Cómo abrir el símbolo del sistema e insertar comandos usando Java?

¿Alguien puede ayudarme a entender cómo hacer CD en un directorio como:

 cd C:\Program Files\Flowella

¿Luego ejecutar otros comandos en ese directorio?

Reham avatar Mar 18 '13 00:03 Reham
Aceptado

Una forma de ejecutar un proceso desde un directorio diferente al directorio de trabajo de su programa Java es cambiar de directorio y luego ejecutar el proceso en la misma línea de comando. Puedes hacer esto ejecutando cmd.exeuna línea de comando como cd some_directory && some_program.

El siguiente ejemplo cambia a un directorio diferente y se ejecuta dirdesde allí. Es cierto que podría utilizar direse directorio sin necesidad de cdhacerlo, pero esto es sólo un ejemplo:

import java.io.*;

public class CmdTest {
    public static void main(String[] args) throws Exception {
        ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "cd \"C:\\Program Files\\Microsoft SQL Server\" && dir");
        builder.redirectErrorStream(true);
        Process p = builder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while (true) {
            line = r.readLine();
            if (line == null) { break; }
            System.out.println(line);
        }
    }
}

Tenga en cuenta también que estoy usando a ProcessBuilderpara ejecutar el comando. Entre otras cosas, esto me permite redirigir el error estándar del proceso a su salida estándar, llamando a redirectErrorStream(true). Al hacerlo, solo me da una secuencia para leer.

Esto me da el siguiente resultado en mi máquina:

C:\Users\Luke\StackOverflow>java CmdTest
 Volume in drive C is Windows7
 Volume Serial Number is D8F0-C934

 Directory of C:\Program Files\Microsoft SQL Server

29/07/2011  11:03    <DIR>          .
29/07/2011  11:03    <DIR>          ..
21/01/2011  20:37    <DIR>          100
21/01/2011  20:35    <DIR>          80
21/01/2011  20:35    <DIR>          90
21/01/2011  20:39    <DIR>          MSSQL10_50.SQLEXPRESS
               0 File(s)              0 bytes
               6 Dir(s)  209,496,424,448 bytes free
Luke Woodward avatar Mar 17 '2013 18:03 Luke Woodward

Puedes probar esto: -

Process p = Runtime.getRuntime().exec(command);
Rahul Tripathi avatar Mar 17 '2013 17:03 Rahul Tripathi

Si desea realizar acciones como cd, utilice:

String[] command = {command_to_be_executed, arg1, arg2};
ProcessBuilder builder = new ProcessBuilder(command);
builder = builder.directory(new File("directory_location"));

Ejemplo:

String[] command = {"ls", "-al"};
ProcessBuilder builder = new ProcessBuilder(command);
builder = builder.directory(new File("/ngs/app/abc"));
Process p = builder.start();

Es importante que divida el comando y todos los argumentos en cadenas separadas de la matriz de cadenas (de lo contrario, la ProcessBuilderAPI no los proporcionará correctamente).

Ashwini Sinha avatar Dec 13 '2014 22:12 Ashwini Sinha