éxécution d'un .bat

Signaler
Messages postés
29
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
28 septembre 2007
-
Messages postés
2
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
30 janvier 2002
-
Bonjour,
Il ma faudrait la méthode pour éxécuter une .bat en cpp.
merci

3 réponses

Messages postés
138
Date d'inscription
jeudi 24 août 2000
Statut
Membre
Dernière intervention
6 avril 2002

Salut,
c'est pareil que pour executer les .exe:

#include <stdlib.h> //include que tu a besoin

//et voila la fonction:

system("tonpointbat");
Messages postés
2
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
30 janvier 2002

Salut,
Attention, si tu es sous Windows, et le ".bat" le laisse penser (!):
Comme indiqué par Jo, un bat et un exe c'est du kif. En fait, je pense qu'un bat lance command.com dans une fenêtre.
Il y a plusieurs méthode pour lancer la chose, WinExec et des trucs comme ça. Mais le blème, c'est que c'est lancé dans un thread indépendant.
Si la suite de ton code exploite le résultat de ton .bat, c'est le bug presque assuré.
Je viens de récupérer un vieux bout de code (du C++ Builder, mais peu importe), les deux fonctions importantes sont CreateProcess et GetExitCodeProcess. Ce sont des fonctions de l'API Win. Le reste est peu important.

STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;
AnsiString cmd = "rar a -x*.rar -ep .\\archives\";
cmd = cmd + CadreDisque->DBEdIdentifiant->Text + ".rar" + " .\\TempoDB\\*.*";

si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;

CreateProcess(NULL,cmd.c_str(),NULL,NULL,false,0,NULL,NULL,&si,&pi);
//WaitForInputIdle(pi.hProcess, 3000);
unsigned long TermStatus;
do
{
GetExitCodeProcess(pi.hProcess, &TermStatus);
}while(TermStatus == STILL_ACTIVE);

Win32Check( CloseHandle(pi.hThread) );
Win32Check( CloseHandle(pi.hProcess) );

Voilà, comme ça, ça marchait. Ce serait à refaire, j'essaierais de trouver une DLL pour "dérarer" ou "dézipper".

A plus
Messages postés
2
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
30 janvier 2002

Effectivement.

Autant pour moi,

Mon machin marche pas fort, car la fenêtre ne se ferme pas.
Par contre, le machin à Jo fonctionne à merveille:
essai.bat contient:
rar a -x essai.rar (ça archive le contenu du répertoire courant)

Le code:

system("essai.bat");
DeleteFile("essai.rar");

fonctionne très bien.

Peut-on empêcher la fenêtre DOS d'être visible un court instant?

Je vais de ce pas corriger quelques sources ...

Encore mille excuses.

Pierre.