Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Bat com delphi


Samuelsjn

Pergunta

Ola pessoal,

 

Gostaria de saber como faço para charmar um sistema um arquivo bat, sendo que neste bat teria que passar alguns paramentros.Como faço com os paramentros no projeto do delphi?

 

Por exemplo:

 

---> cd C:\Arquivos de Programas\PostgreSQL\8.1\bin psql -h localhost -p 5432 -U postgres -d banco -f "C:\script.sql"

 

Aqui estou chamando um sistema "psql" (do banco de dados postgres) e passando parametros como host,usuario,nome do banco e caminho do arquivo.***** Isso foi um exemplo.

 

No meu caso preciso passar somente o nome do arquivo. Como declaro no meu projeto em delphi7

 

Obrigado pela atenção

 

 

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Opa

Tem que ser o BAT? Não pode chamar diretamente no Delphi?

de qualquer forma...

uses
  ShellAPI;

const
  PostgreSQLPath = ''C:\Arquivos de Programas\PostgreSQL\8.1\bin\';

//Diretamente
ShellExecute(Handle, nil, PChar(PostgreSQLPath + 'psql.exe'), '-h localhost -p 5432 -U postgres -d banco -f "C:\script.sql"', PChar(PostgreSQLPath), SW_SHOWNORMAL);

//Bat
ShellExecute(Handle, nil, 'arquivo.bat', '-h localhost -p 5432 -U postgres -d banco -f "C:\script.sql"', nil, SW_SHOWNORMAL);

abrx

Editado por Churc
Link para o comentário
Compartilhar em outros sites

  • 0

Caro Churc,

Acho q voce não entendeu minha pergunta.

Este código que você postou, eu já conhecia.

Eu queria saber como eu faria meus parametros para receber as informações vindas de parametros fora do sistema.

Segue como exemplo o do postgres que o psql recebe o nome do banco, caminho, senha e etc de um arquivo bat

cd C:\PASTA_DO_MEU_SISTEMA\src meu_sistema.exe -NOME_DO_PARAMETRO_DENTRO_DO_MEU_SISTEMA "c:\teste.txt"

Isso que eu quero saber .

Mesmo assim obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Ola pessoal,

Gostaria de saber como faço para charmar um sistema um arquivo bat, sendo que neste bat teria que passar alguns paramentros.Como faço com os paramentros no projeto do delphi?

Por exemplo:

---> cd C:\Arquivos de Programas\PostgreSQL\8.1\bin psql -h localhost -p 5432 -U postgres -d banco -f "C:\script.sql"

Aqui estou chamando um sistema "psql" (do banco de dados postgres) e passando parametros como host,usuario,nome do banco e caminho do arquivo.***** Isso foi um exemplo.

No meu caso preciso passar somente o nome do arquivo. Como declaro no meu projeto em delphi7

Obrigado pela atenção

ahh ta entendi

mas você que não explicou direito então, repara que você fala de "arquivo bat" e "como você faria com os parâmetros no seu projeto delphi"

da impressão que você quis saber como chamar um arquivo bat e saber como passar os parametros pra ele :)

No source do programa, menu "Project > View Source" voce adiciona

var
  szParams: String = '';

procedure GetParams;
var
  i: Integer;
begin
  for i := 1 to ParamCount do
  if (i = 1) then szParams := ParamStr(i) else
  szParams := szParams + ' ' + ParamStr(i);
end;
logo após o begin você chama o GetParams; e depois em szParams está os parametros passados ao programa...
begin
  GetParams;

  if Pos('bla', lowercase(szParams)) > 0 then
  bla;

adapte da forma que desejar...

seria isso?

Editado por Churc
Link para o comentário
Compartilhar em outros sites

  • 0
Ola pessoal,

Gostaria de saber como faço para charmar um sistema um arquivo bat, sendo que neste bat teria que passar alguns paramentros.Como faço com os paramentros no projeto do delphi?

Por exemplo:

---> cd C:\Arquivos de Programas\PostgreSQL\8.1\bin psql -h localhost -p 5432 -U postgres -d banco -f "C:\script.sql"

Aqui estou chamando um sistema "psql" (do banco de dados postgres) e passando parametros como host,usuario,nome do banco e caminho do arquivo.***** Isso foi um exemplo.

No meu caso preciso passar somente o nome do arquivo. Como declaro no meu projeto em delphi7

Obrigado pela atenção

ahh ta entendi

mas você que não explicou direito então, repara que você fala de "arquivo bat" e "como você faria com os parâmetros no seu projeto delphi"

da impressão que você quis saber como chamar um arquivo bat e saber como passar os parametros pra ele :)

No source do programa, menu "Project > View Source" voce adiciona

var
  szParams: String = '';

procedure GetParams;
var
  i: Integer;
begin
  for i := 1 to ParamCount do
  if (i = 1) then szParams := ParamStr(i) else
  szParams := szParams + ' ' + ParamStr(i);
end;
logo após o begin você chama o GetParams; e depois em szParams está os parametros passados ao programa...
begin
  GetParams;

  if Pos('bla', lowercase(szParams)) > 0 then
  bla;

adapte da forma que desejar...

seria isso?

Olá Churc...

Cara era isso mesmo que eu estava querendo.

Valeu pela ajuda...

Link para o comentário
Compartilhar em outros sites

  • 0
Utilize a "ParamStr(Index: integer)"..

assim ParamStr(0) = 'c:\caminho\pasta\programa.exe';

ParamStr(1) = 'parametro1';

ParamStr(2) = 'parametro2';

ParamStr(3) = 'parametro3';

ParamStr(4) = 'parametro4';

ParamStr(5) = 'parametro5';

espero ter ajudado

opa

a desvantagem de usar assim é que de qualquer forma teria que andar por todos os parametros para verificar se o usuário passou algum então daria na mesma

ou seja, de qualquer forma teria que dar um loop nos parametros para verificar quantos foram passados e tal...

já pegando todos os passados e armazenando numa String acredito que de para utilizar de uma forma mais fácil

é minha opinião rs

abrxx

Editado por Churc
Link para o comentário
Compartilhar em outros sites

  • 0

Bat com delphi.... huhuuh

Coloque essa procedure no seu código:

procedure Executa(Comando: string);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
begin
  FillChar(SI, SizeOf(SI), 0);
  SI.cb := SizeOf(StartupInfo);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.wShowWindow := SW_HIDE;
  if CreateProcess(nil, PChar(Comando), nil, nil, False, NORMAL_PRIORITY_CLASS,
       nil, nil, SI, PI) then
    WaitForSingleObject(PI.hProcess, INFINITE);
end;
Para usa-la é facil:
Executa('QUALQUER-COMANDO-DE-DOS-AQUI');

Aêêêê, agora ficou facil, bota qualquer comando que tenha no arquivo bat, você bota ai, ficou facil, roda tudo que você precisa, eu creio , huahuahaa, testa ai

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Bat com delphi.... huhuuh

 

Coloque essa procedure no seu código:

 

 

 
procedure Executa(Comando: string);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
begin
  FillChar(SI, SizeOf(SI), 0);
  SI.cb := SizeOf(StartupInfo);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.wShowWindow := SW_HIDE;
  if CreateProcess(nil, PChar(Comando), nil, nil, False, NORMAL_PRIORITY_CLASS,
       nil, nil, SI, PI) then
    WaitForSingleObject(PI.hProcess, INFINITE);
end;

Para usa-la é facil:

 
Executa('QUALQUER-COMANDO-DE-DOS-AQUI');

 

 

Aêêêê, agora ficou facil, bota qualquer comando que tenha no arquivo bat, você bota ai, ficou facil, roda tudo que você precisa, eu creio , huahuahaa, testa ai

 

Abraços!

No meu código ta dando o seguinte erro: " Project SAFE.exe raised exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'. ".
Access violation at address 00007FFECD12D9A1 in module 'KERNELBASE.dll'. Write of address 000000000070531C.

alguém sabe dizer o que é ?
 

 

Link para o comentário
Compartilhar em outros sites

  • 0

voce tem 2 modos para resolver isso

1 - Compilar o Project SAFE no delphi 7 se estiver usando o windows XP

2 - Executar o Project SAFE.exe em modo de compatibilidade, no windows 7 64 Bits

entretanto:

Segue como exemplo o do postgres que o psql recebe o nome do banco, caminho, senha e etc de um arquivo bat

cd C:\PASTA_DO_MEU_SISTEMA\src meu_sistema.exe -NOME_DO_PARAMETRO_DENTRO_DO_MEU_SISTEMA "c:\teste.txt"

Access violation at address 00007FFECD12D9A1 in module 'KERNELBASE.dll'. Write of address 000000000070531C.

O erro de KERNELBASE indica que quando o executavel foi rodado, ainda não havia o caminho para o banco de dados e consequentemente, o erro de execução, por não ter encontrado o banco de dados

OBS: como sugestão, voce deveria colocar o caminho para o banco de dados em um arquivo .INI e chama-lo atraves do delphi para depois fazer a conexão com o banco de dados ...

abraço

Editado por Jhonas
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...