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);
}
Étiquette : batch
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 MS-DOS : Echapper les caractères de redirection
Comment différencier un > d’un > ?
Imaginons que dans un batch je veuille afficher la ligne suivantes :
<head>
Et la rediriger vers un fichier :
>> mon_fichier.txt
Comment différencier les > du head et ceux de la redirection ?
C’est simple, il faut échapper les > avec des ^:
echo ^<head^> >> mon_fichier.txt
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.
Batch DOS : Comment faire entrer une valeur à l’utilisateur ?
Pour « prompter » l’utilisateur afin qu’il entre une valeur, et placer cette valeur dans une variable MA_VAR, il suffit d’utiliser cette commande :
SET /p MA_VAR=
C’est d’une simplissité ahurissante, isn’t it ?
Bash UNIX : Supprimer des lignes d'un fichier avec SED
sed '/ma_chaine/d' fichier_source.txt > fichier_cible.txt
Voir cette page très complète : USEFUL ONE-LINE SCRIPTS FOR SED