Ajuda script em .bat
Amigos, estou precisando de uma ajuda de vocês...
Tenho um banco postgres em um servidor linux e em um servidor windows. Fiz um script para o servidor linux que me retorna os nomes de todos os bancos postgres no servidor. Mas para windows, estou querendo fazer um script em .bat, para fazer o mesmo. Mas não tenho conhecimento suficiente em scripts .bat, alguém pode me ajudar?
Tenho um banco postgres em um servidor linux e em um servidor windows. Fiz um script para o servidor linux que me retorna os nomes de todos os bancos postgres no servidor. Mas para windows, estou querendo fazer um script em .bat, para fazer o mesmo. Mas não tenho conhecimento suficiente em scripts .bat, alguém pode me ajudar?
Andrei Claro
Curtidas 0
Respostas
Andrei Claro
03/06/2013
Caros colegas, depois de dias de muita pesquisa e estudo, pois não sei criar script .bat, consegui desenvolver um script que me traz quase o que preciso.
Seguinte, tenho uma rede de servidores sendo monitorados pelo Zabbix, e tenho bancos de dados instalados em servidores linux e windows. Pois bem, estava precisando de um script que me retorna-se uma string assim:
Comecei a pesquisar para fazer isso nos servidores linux, pois eu acho bem mais fácil. Sendo assim, consegui encontrar um blog que me ajudou com o script para DB postgres (foi o script que postei inicialmente). A partir deste script desenvolvi um para MySQL e foi um sucesso. Tudo funcionou perfeitamente para os DBs instalados nos servidores linux, que são CentOS.
Ai começou minha dor de cabeça. Para fazer isso nos DBs dos servidores windows eu pensei em fazer um script .bat que me retornasse exatamente a mesma string, o problema é que estava me aventurando em um campo que eu não conheço quase nada.
Bem, inicialmente fui tentar fazer o bat para o DB postgres, usando como referência o script do linux. Ralando muito consegui chegar a um script que esta quase perfeito:
O problema deste script agora é que ele me retorna varios "echo", um em cada linha e eu preciso de toda a saída em uma linha. Tentando resolver o problema joguei os resultados para um arquivo, fazendo assim:
Beleza, foi direitinho, mas não em uma linha. Ele esta gravando assim:
Estou pedindo uma ajuda de alguém que souber. Como faço para editar um arquivo txt usando um script .bat para organizar o texto todo em uma linha, ou melhor, deletar os "enters" e os espaços?
Alguém pode me ajudar?
Desde ja agradeço a todos do fórum.
Seguinte, tenho uma rede de servidores sendo monitorados pelo Zabbix, e tenho bancos de dados instalados em servidores linux e windows. Pois bem, estava precisando de um script que me retorna-se uma string assim:
{\"data\":[{\"{#DBNAME}\":\"nomebanco1\"},{\"{#DBNAME}\":\"nomebanco2\"},...,{\"{#DBNAME}\":\"nomebancon\"}]}
Comecei a pesquisar para fazer isso nos servidores linux, pois eu acho bem mais fácil. Sendo assim, consegui encontrar um blog que me ajudou com o script para DB postgres (foi o script que postei inicialmente). A partir deste script desenvolvi um para MySQL e foi um sucesso. Tudo funcionou perfeitamente para os DBs instalados nos servidores linux, que são CentOS.
Ai começou minha dor de cabeça. Para fazer isso nos DBs dos servidores windows eu pensei em fazer um script .bat que me retornasse exatamente a mesma string, o problema é que estava me aventurando em um campo que eu não conheço quase nada.
Bem, inicialmente fui tentar fazer o bat para o DB postgres, usando como referência o script do linux. Ralando muito consegui chegar a um script que esta quase perfeito:
@echo off
setlocal enabledelayedexpansion
cd C:\Program Files\PostgreSQL\9.2\bin
psql --dbname postgres -U zabbix -Atc "\l" | find "|" /c > C:\zabbix\externalscripts\db_postgres\nresult.txt
psql --dbname postgres -U zabbix -Atc "\l" | find "|" > C:\zabbix\externalscripts\db_postgres\dbresult.txt
cd C:\zabbix\externalscripts\db_postgres
set /p lines=<nresult.txt
set lines=%lines: =%
del nresult.txt
set loop=1
echo {\"data\":[ > listpg.txt
for /f "tokens=1 delims=|" %%a in (dbresult.txt) do (
if !loop! == %lines% (
echo {\"{#DBNAME}\":\"%%a\"}
goto exit
)
set /a loop=!loop!+1
echo {\"{#DBNAME}\":\"%%a\"},
)
:exit
del dbresult.txt
echo ]}
O problema deste script agora é que ele me retorna varios "echo", um em cada linha e eu preciso de toda a saída em uma linha. Tentando resolver o problema joguei os resultados para um arquivo, fazendo assim:
@echo off
setlocal enabledelayedexpansion
cd C:\Program Files\PostgreSQL\9.2\bin
psql --dbname postgres -U zabbix -Atc "\l" | find "|" /c > C:\zabbix\externalscripts\db_postgres\nresult.txt
psql --dbname postgres -U zabbix -Atc "\l" | find "|" > C:\zabbix\externalscripts\db_postgres\dbresult.txt
cd C:\zabbix\externalscripts\db_postgres
set /p lines=<nresult.txt
set lines=%lines: =%
del nresult.txt
set loop=1
echo {\"data\":[ > listpg.txt
for /f "tokens=1 delims=|" %%a in (dbresult.txt) do (
if !loop! == %lines% (
echo {\"{#DBNAME}\":\"%%a\"} >> listpg.txt
goto exit
)
set /a loop=!loop!+1
echo {\"{#DBNAME}\":\"%%a\"}, >> listpg.txt
)
:exit
del dbresult.txt
echo ]} >>listpg.txt
Beleza, foi direitinho, mas não em uma linha. Ele esta gravando assim:
{\"data\":[
{\"{#DBNAME}\":\"nomebanco1\"},
{\"{#DBNAME}\":\"nomebanco2\"},
...
{\"{#DBNAME}\":\"nomebancon\"}
]}
::onde n= quantidade de bancos
Estou pedindo uma ajuda de alguém que souber. Como faço para editar um arquivo txt usando um script .bat para organizar o texto todo em uma linha, ou melhor, deletar os "enters" e os espaços?
Alguém pode me ajudar?
Desde ja agradeço a todos do fórum.
GOSTEI 0
Andrei Claro
03/06/2013
Bom dia!
Depois de muita, mas muita pesquisa consegui resolver meu problema.
Seguinte, para poder monitorar o tamanho dos meus DBs postgres no zabbix eu alterei metade do script .bat que tinha feito.
Desisti de usar arquivos txt e um colega me ajudou a jogar os valores dentro das viriaveis diretamente.
O script ficou assim:
Se alguém precisar de alguma dica para fazer o mesmo, estou a disposição.
Falou!!
Depois de muita, mas muita pesquisa consegui resolver meu problema.
Seguinte, para poder monitorar o tamanho dos meus DBs postgres no zabbix eu alterei metade do script .bat que tinha feito.
Desisti de usar arquivos txt e um colega me ajudou a jogar os valores dentro das viriaveis diretamente.
O script ficou assim:
@echo off
setlocal enabledelayedexpansion
cd C:\Program Files\PostgreSQL\9.2\bin\
for /f "delims=" %%a in ('psql.exe --dbname postgres -U zabbix -Atc "\l" ^| find "|" /c') do @set lines=%%a
set loop=1
set out={\"data\":[
for /f "tokens=1 delims=|" %%a in ('psql.exe --dbname postgres -U zabbix -Atc "\l" ^| find "|"') do (
if !loop! == %lines% (
set out=!out!{\"{#DBNAME}\":\"%%a\"}
goto exit
)
set /a loop=!loop!+1
set out=!out!{\"{#DBNAME}\":\"%%a\"},
)
:exit
set out=!out!]}
echo %out%
Se alguém precisar de alguma dica para fazer o mesmo, estou a disposição.
Falou!!
GOSTEI 0
Andrei Claro
03/06/2013
Galera! Corrigindo o script!
Lembrando que esse script é prar se utilizado com o zabbix!
Lembrando que esse script é prar se utilizado com o zabbix!
:: Autor: Andrei Tunes
:: Data: 06/06/2013
@echo off
setlocal enabledelayedexpansion
cd C:\Program Files\PostgreSQL\9.2\bin\
for /f "delims=" %%a in ('psql.exe --dbname postgres -U zabbix -Atc "\l" ^| find "|" /c') do @set lines=%%a
set loop=1
set out={"data":[
for /f "tokens=1 delims=|" %%a in ('psql.exe --dbname postgres -U zabbix -Atc "\l" ^| find "|"') do (
if !loop! == %lines% (
set out=!out!{"{#DBNAME}":"%%a"}
goto exit
)
set /a loop=!loop!+1
set out=!out!{"{#DBNAME}":"%%a"},
)
:exit
set out=!out!]}
echo %out%
GOSTEI 0