E se vc colocar o próprio shell antes do comando e seu arquivo.bat com o 
caminho completo?
Algo do tipo: "command /c c:\caminhocompleto\seuarquivo.bat seusparametros"  ou 
"cmd /c c:\caminhocompleto\seuarquivo.bat seusparametros"

Então ficaria: (...) memo1.text := ExecuteProcLog('cmd /c c:\restaurabd.bat 
meubanco.fdb', 'c:\') (...)

Pq eu utilizei uma vez em uma rotina parecida com esta desta maneira que eu te 
passei acima.. e nunca me deu problemas com o buffer retornado do cmd =)

[]'s

Eric D. - Desenvolvimento e Soluções de Tecnologia 
[EMAIL PROTECTED] 
"Talk is cheap, show me the code..." 
  ----- Original Message ----- 
  From: Marcos André 
  To: [email protected] 
  Sent: Monday, January 22, 2007 2:39 PM
  Subject: Re: [delphi-br] Interagir com o console


  Opa Eric,
  é não...

  Se eu jogar o parãmetro junto do cmd ele entende tudo como um comando
  só. e diz que o comando não Existe.

  O pior é que se eu acertar este lance do parametro, fica 10.... Ou seja...
  aih eu zero os meus problemas... :)

  Em 22/01/07, Eric D. <[EMAIL PROTECTED]> escreveu:
  >
  > Se eu não estiver errado, o parâmetro "Cmd" da função deve ser o seu
  > comando completo, com parâmetros e tudo mais....
  >
  > []'s
  >
  > Eric D. - Desenvolvimento e Soluções de Tecnologia
  > [EMAIL PROTECTED] <ericdesenv%40yahoo.com.br>
  > "Talk is cheap, show me the code..."
  > ----- Original Message -----
  > From: Marcos André
  > To: [email protected] <delphi-br%40yahoogrupos.com.br>
  > Sent: Monday, January 22, 2007 1:28 PM
  > Subject: RES: [delphi-br] Interagir com o console
  >
  > Olá João,
  >
  > Isto é exatamente o que eu precisa, só que não consegui
  > enviar parâmetros: ex:
  >
  > C:\reparar.bat renal.gdb
  >
  > É desta forma q eu executo no prompt, porém não consigo enviar o renal.gdb
  > pela procedure, tow pesquisando, mas num tow encontrando como fazer...
  >
  > Tem uma idéia?
  >
  > Um Abraço
  >
  > __ __
  > / \ /| |'-.
  > .\__/ || | |
  > _ / `._ \|_|_.-'
  > | / \__.`=._) (_ Marcos André
  > |/ ._/ |"""""""""|
  > |'. `\ | | Analista de Sistema
  > ;"""/ / | | Easy Corporation
  > ) /_/| |.-------.| www.e-easy.com.br <http://www.e-easy.com.br/>
  > ' `-` ' " " msn: [EMAIL PROTECTED] <mralcatraz%40hotmail.com>
  >
  > Planos profissionais com qualidade.
  > consulte nossos planos, click aqui <http://www.e-easy.com.br/websites.php>
  >
  >
  > De: [email protected] <delphi-br%40yahoogrupos.com.br> [mailto:
  > [email protected] <delphi-br%40yahoogrupos.com.br>] Em
  > nome de Joao Morais
  > Enviada em: segunda-feira, 22 de janeiro de 2007 11:03
  > Para: [email protected] <delphi-br%40yahoogrupos.com.br>
  > Assunto: Re: [delphi-br] Interagir com o console
  >
  > Marcos Douglas wrote:
  >
  > > Comece com a função ShellExecuteEx da unit ShellAPI.pas
  > >
  > > --
  > > Marcos Douglas
  > >
  > > From: Marcos André <[EMAIL PROTECTED] <marcos%40e-easy.com.br><mailto:
  > marcos% <marcos%25>40e-easy.com.br> >
  > >
  > >> Olá Pessoal,
  > >>
  > >>
  > >> Tenho uma BAT que executa alguns arquivos do Firebird para
  > >> recuperação de bases, GBAK, GFIX, etc... Gostaria de fazer um programa
  > que
  > >> lidasse com estes arquivos, tipo enviasse comandos para o prompt e leia
  > a
  > >> resposta... alguém poderia me ajudar com um ponto de partida???
  >
  > E continue com essa aqui:
  > (código retirado do Dev-Pascal)
  >
  > Cuidado com as quebras de linha.
  >
  > function ExecuteProcLog(Cmd, WorkDir: String): string;
  > var
  > tsi: TStartupInfo;
  > tpi: TProcessInformation;
  > nRead: DWORD;
  > aBuf: array[0..101] of Char;
  > sa: TSecurityAttributes;
  > hOutputReadTmp, hOutputRead, hOutputWrite, hInputWriteTmp, hInputRead,
  > hInputWrite, hErrorWrite: THandle;
  > FOutput: string;
  > begin
  > FOutput := '';
  >
  > sa.nLength := SizeOf(TSecurityAttributes);
  > sa.lpSecurityDescriptor := nil;
  > sa.bInheritHandle := True;
  >
  > CreatePipe(hOutputReadTmp, hOutputWrite, @sa, 0);
  > DuplicateHandle(GetCurrentProcess(), hOutputWrite, GetCurrentProcess(),
  > @hErrorWrite, 0, true, DUPLICATE_SAME_ACCESS);
  > CreatePipe(hInputRead, hInputWriteTmp, @sa, 0);
  >
  > // Create new output read handle and the input write handle. Set
  > // the inheritance properties to FALSE. Otherwise, the child inherits
  > // the these handles; resulting in non-closeable handles to the pipes
  > // being created.
  > DuplicateHandle(GetCurrentProcess(), hOutputReadTmp,
  > GetCurrentProcess(),
  > @hOutputRead, 0, false, DUPLICATE_SAME_ACCESS);
  > DuplicateHandle(GetCurrentProcess(), hInputWriteTmp,
  > GetCurrentProcess(),
  > @hInputWrite, 0, false, DUPLICATE_SAME_ACCESS);
  > CloseHandle(hOutputReadTmp);
  > CloseHandle(hInputWriteTmp);
  >
  > FillChar(tsi, SizeOf(TStartupInfo), 0);
  > tsi.cb := SizeOf(TStartupInfo);
  > tsi.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  > tsi.hStdInput := hInputRead;
  > tsi.hStdOutput := hOutputWrite;
  > tsi.hStdError := hErrorWrite;
  >
  > CreateProcess(nil, PChar(Cmd), @sa, @sa, true, 0, nil, PChar(WorkDir),
  > tsi, tpi);
  > CloseHandle(hOutputWrite);
  > CloseHandle(hInputRead );
  > CloseHandle(hErrorWrite);
  > Application.ProcessMessages;
  >
  > repeat
  > if (not ReadFile(hOutputRead, aBuf, 16, nRead, nil)) or (nRead =
  > 0) then
  > begin
  > if GetLastError = ERROR_BROKEN_PIPE then Break
  > else MessageDlg('Pipe read error, could not execute file',
  > mtError, [mbOK]);
  > end;
  > aBuf[nRead] := #0;
  > FOutput := FOutput + PChar(@aBuf[0]);
  > Application.ProcessMessages;
  > until False;
  >
  > Result := FOutput;
  > // GetExitCodeProcess(tpi.hProcess, nRead) = True;
  > end;
  >
  > --
  > Joao Morais
  >
  > [As partes desta mensagem que não continham texto foram removidas]
  >
  > [As partes desta mensagem que não continham texto foram removidas]
  >
  > 
  >

  -- 
  Um abraço

  Marcos André

  [As partes desta mensagem que não continham texto foram removidas]



   

[As partes desta mensagem que não continham texto foram removidas]

Responder a