 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
GabrielScorpion Aprendiz


Registrado: Sexta-Feira, 18 de Mai de 2012 Mensagens: 141
|
Enviada: Ter Jul 17, 2012 9:07 am Assunto: Duvidas comandos DOS no Delphi. |
|
|
Bom dia Amigos!
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 |
|
 |
itasouza Aprendiz

Registrado: Quarta-Feira, 30 de Abril de 2008 Mensagens: 232
|
Enviada: Ter Jul 17, 2012 1:55 pm Assunto: Re: Duvidas comandos DOS no Delphi. |
|
|
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 |
|
 |
henemer Novato

Registrado: Sexta-Feira, 14 de Mai de 2004 Mensagens: 29
|
Enviada: Ter Jul 17, 2012 2:04 pm Assunto: |
|
|
| 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 |
|
 |
GabrielScorpion Aprendiz


Registrado: Sexta-Feira, 18 de Mai de 2012 Mensagens: 141
|
Enviada: Ter Jul 17, 2012 4:27 pm Assunto: Re: Duvidas comandos DOS no Delphi. |
|
|
| 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 |
|
 |
GabrielScorpion Aprendiz


Registrado: Sexta-Feira, 18 de Mai de 2012 Mensagens: 141
|
Enviada: Ter Jul 17, 2012 4:52 pm Assunto: |
|
|
Bom...consegui
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 |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Ter Jul 17, 2012 6:48 pm Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|