lancer fichier bat

wiss20000
lancer fichier bat

salut,
j'aimerai bien savoir comment lancer l'exécution d'un fichier .bat à l'aide d'un programme JAVA :?

fredericmazue

Salut wiss20000 :)

Quote:
j'aimerai bien savoir comment lancer l'exécution d'un fichier .bat à l'aide d'un programme JAVA

En général on fait le contraire. Lol :lol:

Non je te taquine. Tu peux lancer un .bat comme on le fait pour un exe depuis Java. Le mieux serait que tu ais ton Programmez! 82 près de toi, il y a dedans un article qui explique comment on fait. Es tu lecteur de Programmez! au fait ?
Sinon on en a parlé déjà plusieurs fois sur ce forum. C'est même une FAQ.
Exemple http://www.programmez.com/forum/viewtopic.php?t=455

En gros cela consiste à appeler java.langRuntime.exec
Le problème est qu'il y a plein de finesses pour le faire *bien* marcher. Je ne peux pas tout expliquer ici.
Mais essaie et si tu as un pb particulier, reviens et on ne reparlera :)

wiss20000

j'ai céer un fichier .bat qui contient
copy test.txt C:\dossier
et j'ai écri ce moceau de code en java

	//--lancer le .bat
		String[] cmd = new String[3];
		cmd[0] = "cmd.exe" ;
		cmd[1] = "/C" ;
		cmd[2] = "C:\\test.bat"; // 2 backslash ! :-)
		Runtime rt = Runtime.getRuntime();
		final Process process = rt.exec(cmd);
		InputStream st= process.getInputStream();

mais rien ne ce passe (le fichier n'est pas copié) :!: :!:
fredericmazue

En effet ça ne peut pas marcher.
Tu es tombé dans tous les pièges possibles.
Remarque ce n'est pas de ta faute, avec ce qu'ils disent dans la Javadoc, tout le monde tombe dedans la première fois.
Quel dommage que tu n'ais pas lu Programmez! 82 ;)
Et tu ne m'as pas répondu, fais tu partie de nos lecteurs :?:

Bon lecteur ou pas, je vais t'aider :)

C'est bien trop long de tout expliquer.
Alors voici un bout de code

package programmez.fred.processesdemo;

import java.util.*;
import java.io.*;

class StdHandler extends Thread {
    InputStream is;
    String type;
    
    StdHandler(InputStream is, String type) {
        this.is = is;
        this.type = type;
    }
    
    public void run() {
        try {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String ligne=null;
            while ( (ligne = br.readLine()) != null)
                System.out.println(type + "> " + ligne);
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

public class Demo4 {
    public static void main(String[] args) throws Throwable {
        if (args.length <= 0) {
            System.err.println("Donnez une commande a lancer");
            System.exit(-1);
        }
        System.out.printf("\nSortie de la commande %s: \n",
                Arrays.toString(args));
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(args);
        
        StdHandler stderr = new
                StdHandler(process.getErrorStream(), "stderr");
        
        StdHandler stdout = new
                StdHandler(process.getInputStream(), "stdout");
        
        stderr.start();
        stdout.start();
        int status = process.waitFor();
        System.out.println("Valeur de retour du sous proc: " + status);
    }
}

Pour essayer tape:

java -cp . programmez.fred.processesdemo.Demo3 cmd /c dir c:\windows

ou pourquoi pas ;)
java -cp . programmez.fred.processesdemo.Demo3 cmd /c copy test.txt C:\dossier

:)

remarque bien le cmd /c
Mais ça je pense que tu l'as déjà compris.
Pour le reste regarde bien le code et tu comprendras aussi :)
Remarque bien aussi le process.waitFor();

Ah là là, 50 lignes de codes pour lancer un exécutable... y pas à dire c'est cool Java :twisted:

Au fait, n'essaie même pas de raccourcir le code, sinon ça va foirer quelque part. Le code ci-dessus est *minimum* pour une exécution sûre... sans blague. :lol:

wiss20000

Merci infinément pour le code source :D
et à propos du magazine je crois qu'il faut s'abonner pour l'avoir :?:

fredericmazue

Quote:
et à propos du magazine je crois qu'il faut s'abonner pour l'avoir

Ben non, tu peux l'acheter en kiosque. Chez ton marchand de journaux quoi :)

Mais si tu as envie de t'abonner, ne te retiens surtout pas ;)

bast2

Tu peux aussi consulter la page http://www.programmez.com/magazine.php et via le lien Trouvez le point de vente le plus proche de chez vous!, obtenir l'adresse du kiosque le plus proche.

fredericmazue

Qu'il s'abonne, c'est le mieux.
Et viiiittte :!: :!: :!:
;)

wiss20000

à propos le code que j'ai proposer merche bien si le fichier "test.txt" setrouve sous le meme répertoire que le .java

//--lancer le .bat
		String[] cmd = new String[3];
		cmd[0] = "cmd.exe" ;
		cmd[1] = "/C" ;
		cmd[2] = "C:\\test.bat"; 
		Runtime rt = Runtime.getRuntime();
		Process process = rt.exec(cmd);
		process.waitFor();
fredericmazue

Quote:
merche bien si le fichier

Non désolé.
Il en donne peut être l'apparence, mais ça ne peut pas marcher *toujours* ET *correctement* sans le thread.
Et en plus dans ton premier exemple il n'y avait pas le waitFor
Alors....

Boum (tôt ou tard, mais plutôt tôt)

Quoi comment :!: :!:
Encore de la contestation :?: :!:

Je t'ai dit. Pour lancer un .exe ou un .bat, c'est comme dans mon code.
C'est comme ça et pas autrement :!:
M'enfin
:twisted: :twisted: :twisted: :twisted: :twisted: :twisted:

:lol:

wiss20000

fredericmazue wrote:

Ben non, tu peux l'acheter en kiosque. Chez ton marchand de journaux quoi :)

Mais si tu as envie de t'abonner, ne te retiens surtout pas ;)


Mais je suis pas en france ni en europe :(
wiss20000

fredericmazue wrote:

Non désolé.
Il en donne peut être l'apparence, mais ça ne peut pas marcher *toujours* ET *correctement* sans le thread.
Et en plus dans ton premier exemple il n'y avait pas le waitFor
Alors....

Boum (tôt ou tard, mais plutôt tôt)

Quoi comment :!: :!:
Encore de la contestation :?: :!:

Je t'ai dit. Pour lance run .exe ou un .bat, c'est comme dans mon code.
C'est comme ça et pas autrement :!:
M'enfin
:twisted: :twisted: :twisted: :twisted: :twisted: :twisted:

:lol:


je ne voulais pas vous contrarier mais c'est juste une constatation :wink:
:arrow: et pour vous donnez raison mon code peut en fait ne pas marcher pour d'autre fichier .bat plus compliqué
wiss20000

j'ai essayer le code que vous m'avez donnez dans éclipse
et à la ligne

System.out.printf("\nSortie de la commande %s: \n", 
                Arrays.toString(args)); 

une erreur c'est produite
The method printf(String) in the type PrintStream is not applicable for the arguments (String, String)

:?:
fredericmazue

Quote:
je ne voulais pas vous contrarier mais c'est juste une constatation

Mais non je ne suis pas contrarié :)
Faut pas toujours me prendre au premier degré ;) Pour la constatation, j'insiste, elle est pas bonne, tu peux me faire confiance.

Quote:
et pour vous donnez raison mon code peut en fait ne pas marcher pour d'autre fichier .bat plus compliqué

Et voilà.... :)

Quote:
une erreur c'est produite

Que diable as tu fait :?:
Mais bon peu importe. La ligne en question c'est juste l'écho de la commande passée au code. Tu peux supprimer cette ligne sans te poser de questions existentielles :)
Au fait ça y est, tu es abonné à Programmez! ;)