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

 Delphi Discussion :

Lancer une commande


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 89
    Points : 59
    Points
    59
    Par défaut Lancer une commande
    Bonjour,

    je cherche désespéremment à lancer une commande DOS mais n'y arrive pas.
    Les chemins pathPosteClient et emplacementClient ont des espaces et je sais que c'est ça qui pose problème mais je ne sais pas comment le résoudre.
    Pouvez-vous m'aider s'il vous plait?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cmde := '/c Robocopy "' + PChar(pathPosteClient) + '" "' + PChar(emplacementClient)+ '" *.* /xo /TEE /LOG:Synchro.log' ;
    ShellExecute(0, nil, PChar('cmd.exe'), PChar(cmde), nil, SW_HIDE);
    Merci, bonne journée.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut Cde
    Bonjour,

    Déja le début ça commence mal ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmde := '/c Robocopy"'\
    il vaudrait sans doute mieuxEt pour robocopy je pense qu'il vaudrait mieux le chemin complet a moins qu'il ne soit dans la variable path
    cmde := '"c:/chemin complet de robocopy/robocopy.exe"'
    Les quotes "" c'est obligatoire pour encadrer les chemins avec espace sans cela apres un espace dans le path c'est interprété comme le parametre suivant.

    Apres on verra. Essaye deja de simplement lancer robocopy sans rien faire, puis tu t'attaqueras aux parametres.

  3. #3
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    essaye peut etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmde := '/c "Robocopy \"' + pathPosteClient + '\" \"' + emplacementClient+ '\" *.* /xo /TEE /LOG:Synchro.log"' ;

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Bien qu'inutile ici puisque robocopy est un exe, cmd /c est correct pour véritablement exécuter la commande. Sans cela, l'invité s'ouvre sans rien lancer
    Sinon, rien de choquant si ce n'est... le fichier log. Robocopy est dans System32 et c'est certainement là qu'il tente d'écrire (le répertoire de travail n'étant pas spécifié) engendrant bien sûr un access denied.

    ps: la conversion en PChar est inutile au remplissage de cmde.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 011
    Points : 2 078
    Points
    2 078
    Par défaut Cde
    Bonjour,
    Désolé pour ma réponse à coté de la plaque, j'ai perdu une occasion de me taire

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 89
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    essaye peut etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmde := '/c "Robocopy \"' + pathPosteClient + '\" \"' + emplacementClient+ '\" *.* /xo /TEE /LOG:Synchro.log"' ;
    ok merci, ça ne marche pas mais merci pour votre aide.
    Le robocopy se lance bien avec la ligne ci-dessus mais le chemin source est de destination est incorrect dans le fichier de synchro.log.
    Pouvez-vous m'expliquer la logique? Pourquoi mettre cela \" par exemple?

    Merci encore!

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    c'est pour échapper le " !

    Sinon, il faut changer le nil dans lpDirectory par un chemin de travail
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    1erement, je pense que la réponse de ANDNOTOR est plus adéquate que la mienne. En effet, pourquoi lancer dans une fenetre cmd ?
    En ce qui concerne ma proposition, je suppose que le switch /c attend la commande en 2eme paramètre, hors la tu lui en fournit 4 (robocopy, fichierSrc, fichierDst, et "*.*") ainsi que 3 autres switch (/xo, /TEE, et /LOG). Donc le fait de mettre des guillements autour de tout ca la détermine comme le seul paramètre du switch /c. Ensuite, les \" c'est pour mettre des " dans une chaine, mais la je me trompe peut être, ce n'est peut être pas la bonne façon d'escaper les guillemets

    mais comme le dit ANDNOTOR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmde := '"' + pathPosteClient + '" "' + emplacementClient+ '" *.* /xo /TEE /LOG:Synchro.log' ;
    ShellExecute(0, nil, PChar('Robocopy.exe'), PChar(cmde), nil, SW_HIDE);
    au detail près du fichier de log qu'il faut mettre ailleurs

Discussions similaires

  1. [system] lancer une commande dos
    Par romuluslepunk dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/08/2005, 11h54
  2. [C#] Lancer une commande systeme ?
    Par Oberown dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/07/2005, 11h29
  3. [Dos] Lancer une commande dos sans attendre la fin
    Par MrEddy dans le forum Windows
    Réponses: 4
    Dernier message: 09/06/2005, 17h38
  4. Lancer une commande en C.
    Par ronan99999 dans le forum Windows
    Réponses: 2
    Dernier message: 26/07/2004, 16h25
  5. Réponses: 1
    Dernier message: 30/04/2004, 11h36

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