IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Executer commande système dans un .bat


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut Executer commande système dans un .bat
    Bonjour a tous!

    Alors voila mon problème :

    Je veux faire une ptite appli qui s'occupe de régler l'heure du PC quand celui démarre (la pile ma carte mère a un peu de mal et l'heure se dérègle assez souvent...)

    Seulement voila, je n'arrive pas à exécuter le .bat qui devrait normalement se charger de faire ça...

    Je vous file la classe qui marche pas pour ceux qui veulent tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    import java.io.File;
    import java.io.FileWriter;
    import java.io.PrintWriter;
     
    public class DateHeure {
     
        public static void main(String args[]) {
            new DateHeure();
        }
     
        public DateHeure() {
            setTime("12:00", "03-03-09");
        }
     
        private void setTime(String heure, String date) {
            try {
                if (new File("date.bat").exists()) {
                    new File("date.bat").delete();
                }
     
                new File("date.bat").createNewFile();
     
                PrintWriter pw = new PrintWriter(new FileWriter("date.bat"));
                pw.println("date " + date);
                pw.println("time " + heure);
                pw.close();
     
                Runtime r = Runtime.getRuntime();
                //  !!!!! REMPLACER LE PATH VERS LE .BAT POUR TESTER !!!!!
                r.exec("cmd /c C:/PROG/DateHeure/date.bat");
     
                // déjà essayé :
                // r.exec("cmd /c \"cmd /c C:/PROG/DateHeure/date.bat\"");
                // r.exec("C:/PROG/DateHeure/date.bat");
     
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    Le .bat est bien créé (ou mis a jour) à chaque exécution...

    Quand je le lance dans une invite MS-DOS, ca marche.
    Quand je lance la commande "cmd /c C:/PROG/DateHeure/date.bat" dans le 'Démarrer>Exécuter' de windows, ça marche.

    Mais quand j'essaye d'exécuter tout ça depuis java... ca passe pas...

    Quelqu'un a une idée???
    Merci d'avance

  2. #2
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    salut,

    et si tu essayais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Runtime r = Runtime.getRuntime();
    String[] cmdAExecuter = {"cmd.exe", "/c", "C:\\PROG\\DateHeure\\date.bat"};
    r.exec(cmdAExecuter);
    il y a plein de post sur ce forum portant sur ce sujet; tu pourrais faire une petite recherche

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Je dirais même plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Runtime r = Runtime.getRuntime();
    String[] cmdAExecuter = {"cmd.exe", "/c", "C:\\PROG\\DateHeure\\date.bat"};
    r.exec(cmdAExecuter);
    r.getInputStream().close();
    r.getErrorStream().close();

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    Bonsoir a tous!

    Tout d'abord, merci de s'être penché sur le problème

    MAIS... parce qu'il y a un mais!
    Déjà, juste pour dire que j'avais fait quelques recherches sur le forum pour trouver comment exécuter un .bat ... mais je pense que vous n'avez pas testé la classe que j'ai posté, car le Java n'arrive pas a modifier l'heure système en exécutant le .bat généré...

    Et je comprend pas pourquoiiiiiiiiiiiiiiii!!!!
    En double cliquant sur le .bat, ça change l'heure, en le lançant depuis le prog java, rien ne se passe... (Pas d'erreurs, RIEN!)

    Alors, est ce un problème de droits ou un truc comme ca? Java n'a t il pas le droit de toucher aux propriétés du système (ça m'étonnerais mais bon, je sèche la!)

    Que les sceptiques exécutent la ptite classe que j'ai posté pour comprendre ce que je veux dire (En changeant le path vers le .bat bien sur!)

    A++

  5. #5
    Membre émérite Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Par défaut
    en effet, ça donne pas le résultat

    j'ai essayé en récupérant la sortie, et ça a marché... pourquoi?? aucune idée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Runtime r = Runtime.getRuntime();
    Process p = r.exec(new String[]{"cmd", "/c", "date.bat"});
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String ligne;
    while((ligne = reader.readLine()) != null)
    	System.out.println(ligne);
    reader.close();

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    C'est normal, les flux de sortie et d'erreur pouvant être bloquant suivant le type d'application, il faut soit les consommer, soit les fermer. Ce problème est lui aussi évoqué au moins quelques dizaines de fois.

    Par contre avec seulement un close() sur la sortie comme je l'avais suggéré, ça ne marche pas? Je veux pas tester ça car je ne suis pas sous windows, mais il me semble bien que normalement c'est suffisant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Commande rm dans script bat
    Par doudounico dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 11/12/2009, 09h56
  2. Execution commande dos dans VBA (Pb de guillemets ?)
    Par shinta dans le forum VBA Access
    Réponses: 3
    Dernier message: 19/10/2007, 14h19
  3. Réponses: 1
    Dernier message: 14/03/2007, 15h56
  4. Masquer une commande système dans python
    Par Mysti¢ dans le forum Général Python
    Réponses: 5
    Dernier message: 03/11/2006, 16h33
  5. [Système] executer commande ssh dans une page php
    Par marielaure2805 dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2006, 10h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo