Exécuter des scripts batch ou des commandes système depuis une application
Par Delphi Source - March 21, 2026 · Vues: 16 · Catégories: Codes Sources · Tags: #Windows #Bat

Exécuter des scripts batch ou des commandes système depuis une application

Cette unité fournit la classe utilitaire TCmdPipeExecutor qui permet de lancer cmd.exe en arrière-plan depuis une application VCL, d’envoyer des commandes via stdin, de capturer stdout/stderr à travers des pipes anonymes, et de récupérer le code de sortie du processus.


Exemple d’utilisation simple (dans une Form VCL)

uses
  UnitCmdPipeExecutor, System.Classes, Vcl.StdCtrls;
 
procedure TForm1.ButtonRunClick(Sender: TObject);
var
  Executor: TCmdPipeExecutor;
  Commands: TStringList;
  Output: string;
  ExitCode: DWORD;
begin
  Executor := TCmdPipeExecutor.Create;
  Commands := TStringList.Create;
  try
    // Exemple : liste de commandes batch
    Commands.Add('echo Début du script');
    Commands.Add('dir C:\Windows');        // commande montrant la sortie
    Commands.Add('echo Fin du script');
 
    // Exécute via cmd.exe, fenêtre cachée, encodage OEM (UseUtf8 = False), timeout 10s
    if Executor.ExecuteCmdAndCapture(Commands, Output, ExitCode, True, False, 10000) then
    begin
      ShowMessage(Format('Sortie (%d octets) - ExitCode=%d'#13#10'%s', [Length(Output), ExitCode, Output]));
    end
    else
      ShowMessage('Erreur: impossible de lancer cmd.exe.');
  finally
    Commands.Free;
    Executor.Free;
  end;
end;

Exemple avec TMemo (utilisation directe de ExecuteFromMemo)

procedure TForm1.ButtonRunFromMemoClick(Sender: TObject);
var
  Executor: TCmdPipeExecutor;
begin
  Executor := TCmdPipeExecutor.Create;
  try
    // SourceMemo contient les commandes (une par ligne)
    // DestMemo affichera la sortie et le code de retour
    Executor.ExecuteFromMemo(SourceMemo, DestMemo, True, False, 15000);
  finally
    Executor.Free;
  end;
end;



Liens de téléchargement : CmdPipeExecutor.zip


Un petit clic (J'aime) qui fait plaisir !