Yo haría esto:
Código Delphi
[-] WinExec('cmd /cdir\>reporte.txt&echo.>>reporte.txt&set>>reporte.txt&echo.>>reporte.txt&dir %systemroot%\system32\*.exe /b /s>>reporte.txt&start reporte.txt', SW_HIDE);
Que es lo mismo que ejecutar secuencialmente las siguientes ordenes:
Código:
dir \ > reporte.txt
echo. >> reporte.txt
set >> reporte.txt
echo. >> reporte.txt
dir %systemroot%\system32\*.exe /b /s >> reporte.txt
start reporte.txt
Si no me equivoco con ello quedas imposibilitado a usar
call y
goto, pero muy probablemente no las llegues a usar.
Lo otro que haría es igual de sencillo sin la necesidad de urguetear los recursos de la aplicacion;
Código Delphi
[-]var
lpBuffer: PChar = '@echo off'#10+
'set value=7'#10+
':loop'#10+
'set /a value=%value%-1'#10+
'echo %value% ...'#10+
'if %value%==0 (pause&del %0&exit)'#10+
'goto:loop';
procedure TForm1.Button1Click(Sender: TObject);
var hFile: Integer;
begin
hFile := _lcreat('noseque.cmd', 0);
_lwrite(hFile, lpBuffer, lstrlen(lpBuffer));
CloseHandle(hFile);
WinExec('cmd /knoseque.cmd', SW_SHOW);
end;
Claro que en este ultimo ejemplo puedes llamar directamente al batch y oculto como el primer ejemplo; y cabe la pena hacer notar que el mismo batch se elmina. (
del %0)
Suerte