codificação do arquivos .bat!
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
Curtidas 0
Melhor post
Emerson Nascimento
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.
GOSTEI 1
Mais Respostas
Wanderson Cardoso
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.
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!
GOSTEI 0
Emerson Nascimento
14/06/2021
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;
GOSTEI 1