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

C Discussion :

Utiliser des commandes MS-DOS en langage C ? [Non suivi]


Sujet :

C

  1. #21
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    j'ai encore besoin de votre aide malheureusement, mais j'ai bientot fini ...
    alors, je suis toujours sur mon interpreteur et sur la commande dir, qui me pose quelque probleme :
    en faites, je voudrais que ca marche lorsque l'utilisateur saisie la commande : dir c:\windows\system32
    le seul probleme c'est qu'il faut écrire dir c:\\windows\\system32. Donc j'ai mis c:\\windows\\system32 dans un tableau telle que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(i=0;i<maxT;i++)
    	{
    		if((t[i]=='\') && (t[i+1]=='\'));
    		{
    		t[i]=t1[j]
    		i=i++;
    		j=j++;
          }
    	}
    donc la normalement sa me supprime les "\", mais le probleme c'est que je n'ai pas le droit de mettre les "\" dans les guillemets !
    Vous avez une solution ???

    ps: dans la boucle for, j'ai mis que la partie qui nous interresse

  2. #22
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spidermeu
    en faites, je voudrais que ca marche lorsque l'utilisateur saisie la commande : dir c:\windows\system32
    le seul probleme c'est qu'il faut écrire dir c:\\windows\\system32.
    Non. Si ,on saisie \, il n'y a rien à changer C'est si on veut mettre une chaine ou un caractère constant dans le code source avec \ quil faut mettre \\.

  3. #23
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    ah d'accord !
    mais ya un petit hic, quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fgets (saisie, sizeof saisie, stdin);
    	sscanf (saisie, "%s", cmd);
    	printf("%s",cmd);
    	system(cmd);
    	}
    	system("pause");
    et que l'utilisateur entre dir c:\blabla, cmd ne prend que le dir ( car je crois qu'il s'arrete au premiere espace qu'il rencontré).
    donc si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fgets (saisie, sizeof saisie, stdin);
    	sscanf (saisie, "%s%s", cmd,suite);
    	printf("%s %s",cmd,suite);
    	system(cmd suite);
    	}
    	system("pause");
    je met quoi dans system ??? il faut que je fasse une nouvelle variable qui prend les espaces ???
    merci

    PS: comme je dois remplacer le dir, je ne peux pas le prendre direct, en gros, l'utilisateur va tapez voir c:\blabla donc, ici, je vais devoir remplacer voir par dir et ajouter le contenu de "suite" ...
    Ya pas moyen de faire un truc du meme style avec un malloc ( que je n'utilise pas)

  4. #24
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spidermeu
    mais ya un petit hic, quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fgets (saisie, sizeof saisie, stdin);
    	sscanf (saisie, "%s", cmd);
    	printf("%s",cmd);
    	system(cmd);
    	}
    	system("pause");
    et que l'utilisateur entre dir c:\blabla, cmd ne prend que le dir ( car je crois qu'il s'arrete au premiere espace qu'il rencontré).
    donc si je fais :
    Je ne comprends pas très bien pourquoi c'est si compliqué.
    • Tu saisies la ligne avec fgets()
    • Tu retires le '\n' final de la ligne si il existe (strchr()...)
    • Tu passes la ligne à system().

    Terminé.

  5. #25
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    je te remercie, desoler, je suis etudiant et je ne me suis arreter qu'a la gestion de fichier

  6. #26
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    je vais finir par être enervant mais j'ai une derniere question, promis !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char prompt[K];		
    	char *inprompt="%username%";
     
    	system("ver");						   
    	sprintf( prompt, "echo %s",inprompt);
    	system(prompt);
    pour ce code, je fais afficher le nom de l'utilisateur a l'ecran. En faites, je cherche a recuperer le nom de l'utilisateur et de placer ce nom dans une variable. Auriez vous une idée ?

  7. #27
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Spidermeu
    je vais finir par être enervant mais j'ai une derniere question, promis !
    Non, pas de problèmes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char prompt[K];		
    	char *inprompt="%username%";
     
    	system("ver");						   
    	sprintf( prompt, "echo %s",inprompt);
    	system(prompt);
    pour ce code, je fais afficher le nom de l'utilisateur a l'ecran. En faites, je cherche a recuperer le nom de l'utilisateur et de placer ce nom dans une variable. Auriez vous une idée ?
    Du moment que K est suffisamment grand, ça devrait fonctionner. Qu'est-ce qui ne va pas ? Est-tu bien sûr que 'inprompt' est <> NULL ?

    D'autre part, system() est fait pour passer une commande, pas pour afficher un prompt...

  8. #28
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    je te remercie,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char prompt[K];      
       char *inprompt="%username%";
     
       system("ver");                     
       sprintf( prompt, "echo %s",inprompt);
       system(prompt);
    en faites le code fonctionne très bien, il affiche dans l'interpreteur de commande le nom de l'utilisateur ( par exemple admin).
    Mon objectif est de recuperer le nom de l'utilisateur ( donc administrateur) pour le placer dans une variable.
    grace a cette variable, je pourrais faire mon prompt ( je suis en train de faire un interpreteur de commande en francais).
    au final, je souhaite que mon prompt donne : administrateur>
    où administrateur est le nom de l'utilisateur ( on pourrais très bien voir Toto).

  9. #29
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    finalement j'ai reussi en passant par un fichier (en faisant un echo off %username% >c:\nouveau.txt et puis j'ai recuperer le nom de l'utilisateur en ouvrant le fichier) .
    mais j'ai encore un autre probleme, je ne comprend pas vraiment l'utilisation des touches claviers... voici mon code :

    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
    void creation(char option[]) //char option[K] (ou K=50) avec option = c:\nouveau.txt
    {
    	FILE *fic;
    	unsigned char c;
    	int q,compar;
    	char phrase[2];
    	char commande[K];  
     
    	sprintf( commande, "echo off >%s", option );
    	system(commande);
    	q=0;
    	compar=0;
    	c = getch();
     
    	do
    	{
    		fic=fopen(option,"a");
    		fgets(phrase,50,stdin);
    		fprintf(fic,"%s",phrase);
    		fflush(stdin);
    		fclose(fic); 
    	}
    	while(c=!33);
     
    }
    en faites, avec ce code je veux faire un nouveau fichier (où le chemin et le nom son contenu dans la variable option). dans la boucle do, je veux prendre un morceau de ce que saisie l'utilisateur ( avec fgets) puis l'inserer dans le fichier txt. une fois les 50 caractere saisie,le fichier se ferme et s'ouvre de nouveau pour recommencer l'operation .
    en resume :
    l'utilisateur saisie ses 50 caracteres
    ==>> on place les caracteres saisie par l'utilisateur dans le fichier.txt
    ==>> l'utilisateur saisie de nouveau ses 50 caracteres
    ==>> on place les caracteres saisie par l'utilisateur dans le fichier.txt
    ==>>>et ainsi de suite
    ==>> tant que l'utilisateur n'appuie pas sur la touche correspondant a 33 (la condition du while)!.....

    e probleme, c'est que sa ne marche pas !
    les 50 premiers caracteres ( enfin un peu moins (2 ou 3 en moins )) sont bien saisie mais les autres non !
    En plus, lorsque j'appuie sur la touche echap par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while(c=!X); //où  X = le n° associé a la touche echap
    Ca supprime la totalité de ce que l'utilisateur a saisie. Et pour quittter la boucle je dois appuieyer sur la touche entrer

  10. #30
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je ne comprends pas trop la logique de ce code:

    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
     
     
    	c = getch();
     
    	do
    	{
    		fic=fopen(option,"a");
    		fgets(phrase,50,stdin);
    		fprintf(fic,"%s",phrase);
    		fflush(stdin);
    		fclose(fic); 
    	}
    	while(c=!33);
     
    }
    Premièremenet, fflsuh(stdin) n'a aucun sens.

    Ensuite, cela ne te choque pas que ta variable c n'est jamais mise à jour dans la boucle?

    Ensuite, il faut toujours tester le retour des fonctions. Surtout fopen, fgets...

    Finalement:

    ==>> tant que l'utilisateur n'appuie pas sur la touche correspondant a 33 (la condition du while)!.....
    Faut-il encore arriver à capter que la touche 33 a été appuyée... Fait un programme vide qui affiche "Echappe" lorsque tu appuies dessus... Ce sera un bon exercice...

    les 50 premiers caracteres ( enfin un peu moins (2 ou 3 en moins )) sont bien saisie mais les autres non !
    Logique, il faut de la place pour mettre le '\0' à la fin de la chaîne...

    En plus, lorsque j'appuie sur la touche echap par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while(c=!X); //où  X = le n° associé a la touche echap
    Ca supprime la totalité de ce que l'utilisateur a saisie. Et pour quittter la boucle je dois appuieyer sur la touche entrer
    Cela est dépendant du système d'exploitation sous lequel tu travailles à mon avis et non le C... A la place pourquoi ne pas continuer jusqu'à ce que l'utilisateur rentre une ligne vide?

  11. #31
    Membre habitué
    Avatar de Spidermeu
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 147
    Points : 151
    Points
    151
    Par défaut
    desoler pour les erreurs mais en langage C je n'y connais pas grand chose, je me suis arreter qu'a l'ouverture des fichiers. je ne comprend pas vraiment mes erreur ( c'est bien pour ca que je post) a part le fflush(stdin) qui ne sert a rien oui. autement pour gerer la touche "echap" je ne vois pas vraiment comment faire a part le bou de code que j'ai trouver dans la faq

  12. #32
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour tous le monde,
    Voila mon problème, je veux executer des commandes ms-dos sous C++, j'y suis arriver par l'intermédiaire de la méthode system(). le problème est que je veux envoyer plusieurs instructions successives. Par fichier bat, cela marche avec un retour chariot, mais je voudrais l'incorporer directement dans le langage C, or si je fais plusieurs system(), cela m'ouvre autant de fenetre ms dos que de system() inclus. meme en mettant tout dans le system suivie d'un \n en fin de saisie de chaque, cela n'aboutie pas.
    Merci d'avance pour vos réponses.
    john

  13. #33
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par darkprophet
    Voila mon problème, je veux executer des commandes ms-dos sous C++, j'y suis arriver par l'intermédiaire de la méthode system(). le problème est que je veux envoyer plusieurs instructions successives. Par fichier bat, cela marche avec un retour chariot, mais je voudrais l'incorporer directement dans le langage C, or si je fais plusieurs system(), cela m'ouvre autant de fenetre ms dos que de system() inclus. meme en mettant tout dans le system suivie d'un \n en fin de saisie de chaque, cela n'aboutie pas.
    Appelle un batch. Eventuellement, crées ce batch avant dans ton code...

    (Tu aurais dû créer un nouveau sujet...)

  14. #34
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    En ce moment, c'est ce que je fais, j'appelle le fichier batch a partir de l'exe, mais ça me pose probleme lorsque je l'execute, il me plante mon exe et continue a faire fonctionner le point batch, pourtant, j'utilise des threads pour pouvoir gerer mais des que le batch s'execute, le .exe se plante en beauté.

Discussions similaires

  1. utilisation des commandes "." et "exec"
    Par khaliloum dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2007, 09h08
  2. Réponses: 2
    Dernier message: 16/12/2006, 17h37
  3. Erreur utilisation des commandes shell
    Par paolo2002 dans le forum Windows XP
    Réponses: 7
    Dernier message: 05/11/2006, 14h09
  4. utilisation des commandes shell dans un programme C
    Par rasgueados dans le forum Linux
    Réponses: 15
    Dernier message: 03/08/2006, 17h25
  5. Utiliser une commande du DOS
    Par nkd dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 21/10/2005, 07h34

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