codificação do arquivos .bat!
14/06/2021
0
Pessoal estou criando um aplicativo em delphi que restaura um backup em um banco vazio isso em postgres.
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?
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
+ 0
Responder
Post mais votado
14/06/2021
precisa ser um bat?
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.
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
Responder
Mais Posts
15/06/2021
Wanderson Cardoso
precisa ser um bat?
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.
Como Faço isso!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!
Responder
15/06/2021
Emerson Nascimento
supondo que o conteúdo do teu ini seja assim:
utilização no Delphi, supondo que o ini tenha o mesmo nome do executável e esteja na mesma pasta...
[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;
Responder
Clique aqui para fazer login e interagir na Comunidade :)