ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Duvidas comandos DOS no Delphi.

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
GabrielScorpion
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 18 de Mai de 2012
Mensagens: 141

MensagemEnviada: Ter Jul 17, 2012 9:07 am    Assunto: Duvidas comandos DOS no Delphi. Responder com Citação

Bom dia Amigos! Smile
Vamos ao assunto:
Seguinte, tenho uma aplicação que fará backup do meu banco mysql, este backup sera zipado com senha...e depois que zipar vai ter que excluir o arquivo .sql que foi gerando.
Estou fazendo essas linhas de comandos no botão de backup:

Código:

procedure TForm1.Button1Click(Sender: TObject);
var senha:string;
comandos:string;
begin
senha:= Edit1.Text;

comandos:=
'mysqldump -u root -padmin -P 3306 sistemacomercial > c:\backup_mysql\backup.sql'+

'C:\backup_mysql\Zip\7z.exe a -t7z "c:\backup_mysql\backup.zip" "c:\backup_mysql\backup.sql" -p'+senha+

'del "c:\backup_mysql\backup.sql"';


winexec(PAnsiChar(AnsiString('cmd /c'+comandos )),SW_HIDE);

end;


Só que não esta sendo executado, tipo esta concatenando tudo. Utilizei esses comando desse jeito em um arquivo .bat e funcionou...só que não quero realizar atraves de arquivo bat, pq como podem perceber tem uma variavel nos comando (variavel senha) que tem que ser preenchida.

Eu tentei usar o #13 pra pular linha, mais não da certo, e também tentei criar uma variavel pra cada linha de comandos dessas, e coloquei no winexec, mais também não deu certo.
O unico jeito que consegui, foi tipo..colocar o comando de criar meu .sql ne um botão...e ne outro botão colocar o comando de zipar...e em outro botão colocar o comando de deletar o arquivo sql, mais dessa forma fica muito amador e complexo.

O que eu quero é como eu faço pra executar essas varias linhas de comando DOS, pois consigo executar apenas uma linha.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
itasouza
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 30 de Abril de 2008
Mensagens: 232

MensagemEnviada: Ter Jul 17, 2012 1:55 pm    Assunto: Re: Duvidas comandos DOS no Delphi. Responder com Citação

Amigo

Eu fiz algo parecido no meu caso eu fiz um sistema que gravava na maquina um arquivo .bat e executável o mesmo no tempo programado.
Vou te dar um exemplo:

conteudo := 'cd\' + #10 + 'shutdown -f -r -t 3000 -c "O sistema foi programado para ser reiniciado automaticamente!"';
//criar arquivo
CriarBat;


procedure TfrmSisDesligar.CriarBat;
var
destino : TextFile;
begin
//faz uma referência a um arquivo
AssignFile(destino,'c:\destino.bat');
{$i-}
//abre o arquivo destino
reset(destino);
{$i+}
if IOResult <> 0 then
begin
ShowMessage('Arquivo destino está sendo criado na unidade C!!');
//criando o arquivo de destino
Rewrite(destino);
ShowMessage('Arquivo criado com sucesso!!');
//escreve no arquivo destino
Write(destino,conteudo);
ShowMessage('O arquivo destino está criado e pronto para uso!!');
end
else
begin
//caso o arquivo exista então limpa o arquivo
ShowMessage('O arquivo de destino já existe, limpando o conteúdo do arquivo!!');
//caso o arquivo exista então limpa o arquivo
Rewrite(destino);
//escreve no arquivo destino
Write(destino,conteudo);
ShowMessage('O arquivo destino está criado e pronto para uso!!')
end;
//fecha o arquivo
CloseFile(destino);
end;


procedure TfrmSisDesligar.ExecutaBat;
var
HoraAtual : String;
HoraProgramada : String;
begin
HoraAtual := TimeToStr(Now);
HoraProgramada := lbHora.Caption;
if HoraAtual = HoraProgramada then
begin
WinExec(PChar('C:\destino.bat'),SW_SHOW);
end;
end;

só adaptar para o que precisa.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
henemer
Novato
Novato


Registrado: Sexta-Feira, 14 de Mai de 2004
Mensagens: 29

MensagemEnviada: Ter Jul 17, 2012 2:04 pm    Assunto: Responder com Citação

O arquivo bat aceita parâmetros, depois vc recupera os parâmetros com %1 para o primeiro parâmetro, %2 para o segundo parâmetro.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
GabrielScorpion
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 18 de Mai de 2012
Mensagens: 141

MensagemEnviada: Ter Jul 17, 2012 4:27 pm    Assunto: Re: Duvidas comandos DOS no Delphi. Responder com Citação

itasouza escreveu:
Amigo

Eu fiz algo parecido no meu caso eu fiz um sistema que gravava na maquina um arquivo .bat e executável o mesmo no tempo programado.
Vou te dar um exemplo:

conteudo := 'cd\' + #10 + 'shutdown -f -r -t 3000 -c "O sistema foi programado para ser reiniciado automaticamente!"';
//criar arquivo
CriarBat;


procedure TfrmSisDesligar.CriarBat;
var
destino : TextFile;
begin
//faz uma referência a um arquivo
AssignFile(destino,'c:\destino.bat');
{$i-}
//abre o arquivo destino
reset(destino);
{$i+}
if IOResult <> 0 then
begin
ShowMessage('Arquivo destino está sendo criado na unidade C!!');
//criando o arquivo de destino
Rewrite(destino);
ShowMessage('Arquivo criado com sucesso!!');
//escreve no arquivo destino
Write(destino,conteudo);
ShowMessage('O arquivo destino está criado e pronto para uso!!');
end
else
begin
//caso o arquivo exista então limpa o arquivo
ShowMessage('O arquivo de destino já existe, limpando o conteúdo do arquivo!!');
//caso o arquivo exista então limpa o arquivo
Rewrite(destino);
//escreve no arquivo destino
Write(destino,conteudo);
ShowMessage('O arquivo destino está criado e pronto para uso!!')
end;
//fecha o arquivo
CloseFile(destino);
end;


procedure TfrmSisDesligar.ExecutaBat;
var
HoraAtual : String;
HoraProgramada : String;
begin
HoraAtual := TimeToStr(Now);
HoraProgramada := lbHora.Caption;
if HoraAtual = HoraProgramada then
begin
WinExec(PChar('C:\destino.bat'),SW_SHOW);
end;
end;

só adaptar para o que precisa.



Entendi itasouza, agradeço por me responder...mais tipo como crio linhas separadas por linhas, quero tipo dar um enter na hora que eu criar o .bat, pq tenho mais de uma linha de comando.
Tipo ta criando tudo ne uma linha só entendeu? ae qdo executo não executa, mais qdo coloco cada comando ne uma linha do bat ae sim, funciona.

tipo eu fiz assim, mais num deu certo:

Código:

dump:= 'mysqldump -u root -padmin -P 3306 sistemacomercial > c:\backup_mysql\backup.sql';

zipar:= 'C:\backup_mysql\Zip\7z.exe a -t7z "c:\backup_mysql\backup.zip" "c:\backup_mysql\backup.sql" -p';

del:= 'del "c:\backup_mysql\backup.sql"';


// na hora de criar coloquei

Writeln(destino,dump);
Writeln(destino,zipar);
Writeln(destino,del);



só q não esta indo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
GabrielScorpion
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 18 de Mai de 2012
Mensagens: 141

MensagemEnviada: Ter Jul 17, 2012 4:52 pm    Assunto: Responder com Citação

Bom...consegui Smile

mais...


...tive um probleminha :d

nesta linha aqui:
Código:

'for /f "tokens=1-4 delims=/ " %%a IN ( DATE /T ) do (set MYDATE=%%a%%b%%c%%d)';


na parte DATA /T tem que ficar entre aspas unica (') mais qdo coloca fica fora de string...como que faço pra colocar aspa unica ne um string?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Ter Jul 17, 2012 6:48 pm    Assunto: Responder com Citação

coloca duas aspas simples seguidas, tipo:

Código:
'for /f "tokens=1-4 delims=/ " %%a IN ( ''DATE /T'' ) do (set MYDATE=%%a%%b%%c%%d)';

_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB