Fórum codificação do arquivos .bat! #615968
14/06/2021
0
Isso através do cmd usando .bat;
assim em um memo eu jogo esse scripts:
---------------------------------------------------------------------------------------------------------------
@echo
cd c:\programfile(x86)\postgres\9.5\bin
psql -U postgres -h localhost banco_vazio < c:\local_do_backup
pause
------------------------------------------------------------------------------------------------------------------
salvo isso como um arquivo .bat
executo;
depois deleto;
O problema é quando eu executo que fica desse jeito
---------------------------------------------------------------------------------------------------------------
@echo
cd c:\programfile(x86)\postgres\9.5\bin
psql -U postgres -h localhost banco_vazio 0< c:\local_do_backup
pause
----------------------------------------------------------------------------------------------------------------
ai ele dá um erro por causa desse zero que aparece do nada!
depois que pesquisei vi que é por causa da codificação do cmd e do bloco de notas que não batem!
Alguem pode me ajudar?
Wanderson Cardoso
Curtir tópico
+ 0Post mais votado
14/06/2021
você poderia colocar o caminho do postgres e o caminho do banco vazio (e demais dados que forem necessários) num arquivo ini e executar o comando via shell. assim não usa mais o bat.
ou ainda pode criar um script sql para criar o banco de dados (em vez de restaurar de um banco vazio) e executar o script. esse script pode ser gravado 'dentro' do exe a partir de um recurso. também a partir do shell.
Emerson Nascimento
Gostei + 1
Mais Posts
15/06/2021
Wanderson Cardoso
você poderia colocar o caminho do postgres e o caminho do banco vazio (e demais dados que forem necessários) num arquivo ini e executar o comando via shell. assim não usa mais o bat.
ou ainda pode criar um script sql para criar o banco de dados (em vez de restaurar de um banco vazio) e executar o script. esse script pode ser gravado 'dentro' do exe a partir de um recurso. também a partir do shell.
Tipo eu seu gravar um arquivo .ini todavia como faço para consultar os parâmetros que tem dentro de um .ini pelo shell!
Aguardando uma resposta!
Desde já agradeço!
Gostei + 0
15/06/2021
Emerson Nascimento
[POSTGRES] path=c:\\programfile(x86)\\postgres\\9.5\\bin backup=c:\\local_do_backup server=localhost emptydatabase=banco_vazio
utilização no Delphi, supondo que o ini tenha o mesmo nome do executável e esteja na mesma pasta...
var
ArqIni: TIniFile;
caminhopostgre, caminhobkp, servidor, basevazia: string;
comando, parametros: string;
begin
ArqIni := TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI'));
caminhopostgre := ArqIni.ReadString('POSTGRES','path','');
caminhobkp := ArqIni.ReadString('POSTGRES','backup','');
servidor := ArqIni.ReadString('POSTGRES','server','');
basevazia := ArqIni.ReadString('POSTGRES','emptydatabase','');
ArqIni.Free;
if (caminhobkp = EmptyStr) or (servidor = EmptyStr) or (basevazia = emptyStr) then
ShowMessage('Parâmetros inválidos no arquivo ini')
else
begin
comando := caminhopostgre + 'psql.exe'
parametros := '-U postgres -h ' + servidor + ' ' + basevazia + ' < ' + caminhobkp;
// executa e volta para a aplicação
ShellExecute(handle, 'open', PChar(comando), PChar(parametros), PChar(caminhopostgre), SW_HIDE);
// executa e aguarda finalizar a execução do comando
//// declarar SEInfo: TShellExecuteInfo na cláusula var desta função/procedure;
//// declarar CodigoSaida: DWORD na cláusula var desta função/procedure;
//FillChar(SEInfo, SizeOf(SEInfo), 0);
//SEInfo.cbSize := SizeOf(TShellExecuteInfo);
//with SEInfo do
//begin
// fMask := SEE_MASK_NOCLOSEPROCESS;
// Wnd := Application.Handle;
// lpFile := PChar(comando) ;
// lpParameters := PChar(parametros);
// lpDirectory := PChar(caminhopostgre) ;
// nShow := SW_HIDE; // ou SW_SHOWNORMAL
//end;
//
//if ShellExecuteEx(@SEInfo) then
// repeat
// Application.ProcessMessages;
// GetExitCodeProcess(SEInfo.hProcess, CodigoSaida) ;
// until (CodigoSaida <> STILL_ACTIVE) or Application.Terminated
//else
// ShowMessage('Erro ao restaurar a base de dados!');
end;
end;
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)