C# : Exécuter un batch et récupérer la sortie.


private int Run_Batch(string sBatchPath, string sBatchName, string sArgs)
{
	// Code retour du batch
    int iExitCode = 0;
    // Chemin complet du batch
    string sBatchFullPath = sBatchPath + "\" + sBatchName;
    // Configuration du batch (chemin, arguments, sorties...)
    ProcessStartInfo processInfo = new ProcessStartInfo(sBatchFullPath);
    processInfo.CreateNoWindow = true;
    processInfo.Arguments = sArgs;
    processInfo.RedirectStandardOutput = true;
    processInfo.RedirectStandardError = true;
    processInfo.UseShellExecute = false;
    // Process en soi
    Process pBatch = new Process();
    // Redirection de la sortie vers une fonction
    pBatch.OutputDataReceived += new DataReceivedEventHandler(pBatch_OutputDataReceived);
    pBatch.StartInfo = processInfo;
    pBatch.EnableRaisingEvents = true;
    // Démarrage du batch + lecture des sorties.
    pBatch.Start();
    pBatch.BeginOutputReadLine();
    pBatch.BeginErrorReadLine();
    // Synchronisation
    pBatch.WaitForExit();
    iExitCode = pBatch.ExitCode;
    // Fermeture
    pBatch.Close();
    return iExitCode;
}
protected void pBatch_OutputDataReceived(Object sender, DataReceivedEventArgs e)
{
    System.Console.Write(e.Data);
}

BATCH DOS: Récupérer le chemin absolu du batch

Pushez madame !
Le chemin du batch exécuté se retrouve de cette façon :
echo %~dp0
A noter que le chemin à partir duquel on appelle ce batch se retrouve ainsi :
echo %CD%
Source : Weblogs
Ainsi, pour éxécuter un batch qui fait appel à des ressources dans son propre répertoire, le mieux est de commencer ainsi :
@echo off
pushd %~dp0

BATCH : Codes retour (errorlevel )

Dans un fichier .bat, il est souvent nécessaire de retourner un code erreur afin de vérifier son bon fonctionnement.
A la fin du fichier, il suffit d’entrer la commande exit /b number
errorlevel est une instruction qui retourne le code erreur le plus élevé retourné durant l’exécution du batch.
En faisant if errorlevel 3 exit /b 3, on teste si il y a eut une erreur durant le script, et on sort avec ce même code erreur
Le code complet serait :

if errorlevel 3 exit /b 3
if errorlevel 1 exit /b 1
if errorlevel 0 exit /b 0

ATTENTION, si le code erreur est 3, alors errorlevel 3 renvoie vrai, mais aussi errorlevel 2 ou 1, ou 0 !
Errorlevel renvoie VRAI si le code erreur est inférieur ou égal au nombre.