Executer une commande dos

Signaler
Messages postés
45
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
23 août 2007
-
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006
-
slt tlm, voila je voudrai pendant un programme executer une commande
dos. j'ai pensé lancer ma commande avec une ligne dans ce genre mais
cela ne semble pas marcher.




avec tmsDossier qui est un string contenant ma commande "attrbi +s D:\test"


ShellExecute(NULL,NULL,tmpDossier.c_str(),NULL,NULL,SW_SHOWNORMAL);



si je fait cette commande ds un terminal dos tout marche si non dans mon programme on dirait que rien ne se passe

15 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Comment ca on dirait que rien ne se passe? C'est pas parce que tu vois pas de fenêtre dos que rien ne se passe.

Utilise system plutot que ShellExecute, et pour voir ce qui se passe tu peux faire un AllocConsole pour ouvrir une console.
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

Bonjour,
ca peut pas marcher ainsi. Dans ta chaine "attrib" est la commande a executer et "+s D:\test" est le paramettre. Soit tu utilise system("comande", soit tu reformule ShellExecute comme suit :
ShellExecute (NULL, NULL, "atrib", "parametre", NULL, NUL);

Bon courage.
Messages postés
45
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
23 août 2007

merci a tt les 2 de vos reponse



vecchio56 : rien ne se passe dans le sens ou cette commande doit
changer quelque chose dans le dossier que je lui donne en parametre et
lorsque c'est mon programme qui l'execute bas ca ne fait rien sur le
dossier



yserver : je vais essayer les 2 solutions que tu me propose





je vous tiens au courrant
Messages postés
45
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
23 août 2007

Alors apres test des 2 methode cela ne semble tjrs pas marcher ( je
prefere la methode shellexecute car on ne voit pas une fenetre dos
souvrir pendant 1/2 sec )
mon code ressemble a cela :

tmpDossier = "+s " + tmpDossier; //tmpDossier est un string
qui contien deja l'adresse du dossier surlequel je veux effectuer cette
commande

ShellExecute(NULL,NULL,"attrib",tmpDossier.c_str(),NULL,NULL);
Messages postés
196
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
1 mai 2009
2
utilise l'entête process.h en include puis entre la commande system (" "); et place entre les guillemets la commande DOS que tu souhaites

LaPatoshe
Messages postés
45
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
23 août 2007

merci de ta reponse LaPatoshe mais cela a deja ete proposé plus haut et j'avais dit que ca ne semblait pas marcher.

en fait si je veux executer attrib +s D:\Dossier c'est pour que ce le
dossier lise le fichier desktop.ini qui gere les personalistaion du
dossier ( icone couleur fond...) mais voila cela marche si je le fait
dans un terminal mais pas avec system ou shellexecute. j'ai verifié a
plus repise le contenu de ma string qui semble bon
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Normalement les deux devraient marcher. Essaie avec un autre programme
qui ne prend pas de paramètres, et donc tu pourra savoir facilement
s'il marche ou pas.

Vérifie aussi que le répertoire depuis lequel tu exécutes la commandes n'influence pas le résultat
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Je viens de voir ta chaine de départ: "attrbi +s D:\test"

Ca ne peut pas marcher, dans cette chaine \t est interprété comme un seul caractère (tabulation). Il faut que tu fasse:

system("attrbi +s D:\\test");
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

vecchio56 je crois bien que tu a mis la main sur le pb.
Cela dit si tu a verifier ta chaine avec des msgbox tu a du doubler le \.
A verifier qd meme.

Bon courage.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Je pensais avoir juste mis le doigt dessus, mais si c'est la main le problème est sans doute résolu
Messages postés
45
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
23 août 2007

erreur de retranscription de ma part je met bien des // pour le
caractere /, le prob ne vient pas de la. de toute facon ce n'est pas
moi qui rentre l'adresse du dossier mais l'utilisateur avec une boite
de dialog de navigation de fichier donc il doit pas y avoir d'erreur
sur le chemin ou comment il est ecrit ( "//" )
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
C'est bien un \\ et pas un // qu'il faut mettre
Messages postés
45
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
23 août 2007

je devrai plus relire ce que j'ecrit !! ouui en effet c'est bien des \\ que je met ( enfin c'est pas moi qui les met, je recupere adresse de dossier d'une boite de dialogue )
Messages postés
45
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
23 août 2007

bon alors je crois que c'est bon j'ai reussi a faire marcher ma
commande comme je le voulais. la seule chose que j'ai changé pour que
ca marche c'est que j'ai rajouté des " autour de l'adresse du dossier !



merci a tous de votre aide
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

vecchio56 c'est pas bien de te moquer de moi.

En tout cas tu a mis les pieds dans le plat et le doigt sur pb.