Executar arquivo bat que está dentro de uma pasta.

Delphi

09/01/2018

Olá, estou com dificuldade em executar um arquivo bat que está dentro de uma pasta através de uma aplicação feita em Delphi.

Estou usando o seguinte comando para executar a bat.
 ShellExecute(Application.Handle, 'open', 'cmd.exe',
      PChar('/c ' + ObterDiretorioDoExecutavel +
      'scripts\\atualizacao_bd_4.bat'), nil, SW_SHOWNORMAL);


Ao executar o comando, ele não encontra o arquivo bat que está dentro da pasta script.
Ao executar o comando sem o "/C" percebi que ele pega somente o caminho atual da aplicação delphi.
Por exemplo: Minha aplicação Delphi está em :
C:\\Users\\Cacau\\Documents\\Embarcadero\\Studio\\Projects\\atualizacaoTED\\Win32\\Debug

E é exatamente isso que o prompt mostra ao executar o comando sem o "/C".
Não está acessando o caminho que eu indiquei no comando. O que poderia ser ?
Obrigado
Cayque

Cayque

Curtidas 0

Melhor post

Raimundo Pereira

Raimundo Pereira

10/01/2018

Bom dia!
Fiz um exemplo: Testado e Funcionando.
Var Bat:string;
Var Nome_Bat:string;
Var Janela_Execution:integer;
begin
Nome_Bat:='MYCOMANDO.BAT';
Janela_Execution:=1; // 0 Executará a BAT em modo Oculto
// 1 Executará a BAT em modo Vizual
Bat:=ExtractFilePath(Application.ExeName)+Nome_Bat;
if FileExists(bat) then
ShellExecute(0, nil, 'cmd.exe', PWideChar('/c ' + '"'+bat+'"'), nil, Janela_Execution);
Comando dentro da BAT: date /t>>"C:\\Aplic\\Hora.txt"

Ao executar o código ele deverá gerar um TXT com a hora atual.
Sucesso!
GOSTEI 1

Mais Respostas

Raimundo Pereira

Raimundo Pereira

09/01/2018

Detalhe como você está passando um caminho no Shell sempre use '"'+caminho da bat+'"';
Caso não coloque '"' antes e no final e o caminho possuir espaços ele vai lhe mostrar
C:\\\\Users\\\\Cacau\\\\Documents\\\\Embarcadero\\\\Studio\\\\Projects\\\\atualizacaoTED\\\\Win32\\\\Debug
Ao invés de executar sua bat
GOSTEI 0
Cayque

Cayque

09/01/2018

Bom dia!
Fiz um exemplo: Testado e Funcionando.
Var Bat:string;
Var Nome_Bat:string;
Var Janela_Execution:integer;
begin
Nome_Bat:='MYCOMANDO.BAT';
Janela_Execution:=1; // 0 Executará a BAT em modo Oculto
// 1 Executará a BAT em modo Vizual
Bat:=ExtractFilePath(Application.ExeName)+Nome_Bat;
if FileExists(bat) then
ShellExecute(0, nil, 'cmd.exe', PWideChar('/c ' + '"'+bat+'"'), nil, Janela_Execution);
Comando dentro da BAT: date /t>>"C:\\\\Aplic\\\\Hora.txt"

Ao executar o código ele deverá gerar um TXT com a hora atual.
Sucesso!


P2, se você colocar seu script dentro de uma pasta e tentar acessar, ele executa normalmente?
GOSTEI 0
Cayque

Cayque

09/01/2018

P2, consegui resolver aqui. Eu estava errando o caminho dos arquivos no bat. Quando ele é executado pelo Delphi, o caminho que aponta para os arquivos alteram dentro do bat.
Valeu !!!
GOSTEI 0
POSTAR