2009-09-25 8 views

Répondre

6

Vous souhaitez probablement examiner les appels system, ShellExecute et CreateProcess, pour savoir lequel est approprié dans ce scénario.

0

Vous pouvez utiliser l'appel système en C++ du programme pour exécuter toutes les commandes que le programme C++ reçoit de l'utilisateur.

12

Deux options sont disponibles pour exécuter des fichiers de commandes sous Windows à partir de C/C++. D'abord, vous pouvez utiliser system (ou _wsystem pour les caractères larges).

« La fonction du système passe commande à l'interpréteur de commandes qui exécute la chaîne comme une commande du système d'exploitation. Système fait référence à la COMSPEC et les variables d'environnement PATH qui localisent le fichier de commande interpréteur (le fichier nommé CMD. EXE dans Windows 2000 et versions ultérieures). "

Ou vous pouvez directement utiliser CreateProcess.

Notez que pour les fichiers de traitement par lots:

« Pour exécuter un fichier de commandes, vous devez démarrer l'interpréteur de commandes, mis lpApplicationName à cmd.exe et mettre lpCommandLine aux arguments suivants:/c plus le nom de le fichier batch. "

+0

Est-ce que ':: CreateProcess (L" cmd.exe "' fonctionne vraiment? J'ai l'erreur 2, ERROR_FILE_NOT_FOUND MAIS, Dans le même appel, si je remplace par "L" c: \\ Windows \\ System32 \\ cmd.exe "", alors il fonctionne miraculeusement ... – Liviu

5
//example that makes and then calls a batch file 

#include <iostream> 
#include <fstream> 
#include <stdlib.h> 
using namespace std; 
int main(int argc, char *argv[]) 
{ 
ofstream batch; 
batch.open("mybatchfile.bat", ios::out); 
batch <<"@echo OFF\n"; 
batch <<":START\n"; 
batch <<"dir C:\n"; 
batch <<"myc++file 2 >nul\n"; 
batch <<"goto :eof\n"; 
batch.close(); 

if (argc==2) 
    { 
    system("mybatchfiles.bat"); 
    cout <<"Starting Batch File...\n"; 
    } 
} 
1

Mettre dos commandes à l'intérieur script batch semble être une bonne idée. Ensuite, vous pouvez bien sûr utiliser la commande system.

Mais si votre programme C++ nécessite également la sortie standard du script de traitement par lots que vous exécutez, vous devez essayer: _popen ou _wpopen.

Pour plus d'informations et l'exemple de code, visitez MSDN.

Questions connexes