Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Ajuda! Comando para passar último backup completo para disco externo
07-06-2012, 16:00 (Esta mensagem foi modificada pela última vez a: 07-06-2012 16:02 por brunoantunes.)
Mensagem: #11
RE: Ajuda! Comando para passar último backup completo para disco externo
Ora ele está a subtrair numero entao..Este código só é válido caso o dia seja acima de 7.
Para ele te dar 31/05/2012, tens de criar os meses. Estas a querer complicar.

Porque queres subtrair 7 dias?

Código:
If %date:~0,2% > 23 then
copy \\Nas\backup_geral\*%date:~-4%%date:~3,2%%date:~0,2%*.zip I:\

Se colocares este código a correr ele vai copiar o ficheiro da ultima semana. Nao precisas de mais verificacoes..Só tens de garantir que o código corre todos os dias entre o dia 23 e 31.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
08-06-2012, 02:05
Mensagem: #12
RE: Ajuda! Comando para passar último backup completo para disco externo
Olá brunoantunes.
Desculpa, não tinha intenção de te confundir.
Estou a tentar chegar o mais próximo do que pretendo. E sabes como é... estou a tentar perceber, à medida que vou experimentando Wink Tens sido uma ajuda incansável tenho que o dizer...

(07-06-2012 16:00)brunoantunes Escreveu:  Ora ele está a subtrair numero entao..Este código só é válido caso o dia seja acima de 7.
Para ele te dar 31/05/2012, tens de criar os meses. Estas a querer complicar.

Porque queres subtrair 7 dias?

A questão de querer subtrair os 7 dias, era porque, assim teria a certeza que copiava o último backup da semana. E como o backup mensal é feito nos primeiros dias do mês, queria garantir isso mesmo.
Mas já vi que tenho muito que fazer, assim pensei na seguinte estratégia, tendo em conta as tuas dicas:

mm- vai ser a variável que diz-me o dia de hoje no formato mm (ex: 08)
aa- vai ser a variável que diz-me o ano de hoje no formato aa (ex:12)
mesbk - variável que irá corresponder ao mês anterior para o backup
anobk - variável que irá corresponder ao ano anterior para o backup

#INICIO CODIGO#
Set mm=%DATE:~3,2% \*saber o mês actual formato mm*\
set aa=%DATE:~8,4% \*saber o ano actual*\

If %mm% == 1 then \*se o mês actual for Janeiro*\
set /a anobk=%aa% - 1 \*e como o ano backup é referente ao ano que passou vou subtrair 1 ao ano actual*\
set mesbk=12 \*e digo que o mês anterior é Dezembro*\
xcopy \\Nas\backup_geral\*completo*.zip I:\ /D:%mesbk%-28-%anobk% \*copio todos os ficheiros de backup do Nas para I, que foram criados a partir do dia 28 de Dez do ano anterior*\

Else \* senão se*\

If %mm% >= 2 then \*o mês for maior ou igual que dois (abrange de Fevereiro a Dezembro*\
set /a mesbk=%mm% - 1 \*o mês que quero é o anterior, daí menos 1 *\
xcopy \\Nas\backup_geral\*completo*.zip I:\ /D:%mesbk%-28-%aa% \*copio todos os ficheiros de backup do Nas para I, que foram criados a partir do dia 28 do mês anterior, mas deste ano*\

#FIM CODIGO#

O meu problema com este código é a partir do else...
Não sei se faltam {} ou se não posso estruturar assim.
Além que usei o "==" para igual e o ">=" para maior e igual.
E o >= não corre, será preciso algo mais?

Wink Será que ainda está comigo? E já agora recomendas alguns sites para aprender programação?

Obrigada... pela ajuda!
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
08-06-2012, 12:32 (Esta mensagem foi modificada pela última vez a: 08-06-2012 12:36 por brunoantunes.)
Mensagem: #13
RE: Ajuda! Comando para passar último backup completo para disco externo
Porque razao o backup mensal é feito apenas no inicio do mes?
Eu percebo o teu código mas acho que estas a criar linhas desnecessariamente.
Quando o backup semanal é criado, o nome contem o dia/mes/ano certo?
Fica mais facil validar pelo nome do ficheiro.

Se queres garantir a cópia sabendo exactamente o dia em que foi criado o backup, tens de criar um calendário primeiro.
Depois tens de ver TODOS os Domingos do ano e ainda tens de garantir que este processo aconteca automaticamente TODOS os anos.

Olha a quantidade de código que vais ter de criar. Mais vale comprar um software que faca isso.

Se validares pelo nome ficas com menos linhas de código e como tal ficas com menor probabilidade de algo falhar.

O simbolo '>=' nao existe para batch (ou pelo menos nao conheco), usa a string 'GEQ' (Greater than or EQual to).

Site para aprender nao sei camarada. Eu nao sou programador, só fiquei interessado no teu tópico porque porque o script é em batch e na minha area de trabalho tenho de usar esta linguagem uma vez ou outra. Mas tens vários utilizadores aqui nesta area que te podem encaminhar.

Edit: O 'Else' nao é necessario e podes usar parentesis '(' e ')' para inicio e fim.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
11-06-2012, 22:59
Mensagem: #14
RE: Ajuda! Comando para passar último backup completo para disco externo
A questão de passar mensalmente o último backup para disco externo (backup mensal) é só para garantir que a quem estou a passar "a bola" toma atenção/responsabilidade de garantir o backup.
É só mera formalidade, porque os verdadeiros backups são feitos com a rotina do cobian... eu podia programar tudo de longe, mas é mais interessante criar um hábito a quem tem interesse em mantêr os backups seguros Smile

Já arranjei a forma de contornar a questão:

#INICIO CODIGO#
@ECHO OFF
Set mm=%DATE:~3,2%
set aa=%DATE:~8,4%
If "%mm%" GEQ "02" (
set /a mesbk=%mm% - 1
xcopy \\Nas\backup_geral\*completo*.zip I:\ /D:%mesbk%-28-%aa%

) else (

set /a anobk=%aa% - 1
set mesbk=12
xcopy \\Nas\backup_geral\*completo*.zip I:\ /D:%mesbk%-28-%anobk%
)
#FIM CODIGO#

Olhando para o calendário, vejo que os últimos domingos não ocorrem antes de 28, logo coloquei no meu código o dia 28.
Considerando que o responsável pelo backup tem os primeiros dias do mês do início do seguinte mês para fazer a passagem para disco (por regra não quero que passe do dia 5, ou de segunda, o que vier primeiro)

Assim, o código que fiz atribui a mm a data do mês actual a aa o ano actual, depois se mm>=2 (se o mês actual foi igual ou maior que fevereiro) devolve que o mesbk(mês para backup) é o mês anterior (mm - 1), e faz a cópia de todos os ficheiros criados após 28 do mês anterior ao dia actual.
Se o mês não for maior que 2 então trata-se de Janeiro logo o meu mês para backup tem de ser Dezembro do ano anterior, daí anobk=%aa%-1 e mesbk=12, e faz cópia dos ficheiro criados a 28 de Dezembro do ano anterior.

Claro que se hoje(Segunda-11/06/12) colocar o código a correr, copia-me a série completa de 03/06/12 e esta última de 10/06/12, por isso a importância de não passar além dos primeiros dias da primeira semana do mês...

Muito obrigada Bruno, deste-me umas dicas excelentes... sem as quais não chegava a este resultado...

Cool continua assim que tens talento Big Grin
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
11-06-2012, 23:47
Mensagem: #15
RE: Ajuda! Comando para passar último backup completo para disco externo
hhhhmmm...tens uma falha camarada..este mes o ultimo domingo e' dia 24 e em Agosto o ultimo domingo e' dia 26 Confused

Vais usar este codigo manualmente todos os meses?Porque nao colocas automaticamente o script a correr?
Eventualmente, se alguma parte do script der erro, a pessoa a quem passas a bola nao vai perceber o que ai tens.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
12-06-2012, 23:24
Mensagem: #16
RE: Ajuda! Comando para passar último backup completo para disco externo
Hehe! Tanta falta de féBig Grin
Por isso tenho a regra de considerar os primeiros dias do mês para passar o backup para disco externo... para garantir que guardo o máximo do mês anterior.
O último de dia de Junho calha a um sábado (30) logo o último backup a considerar é o que vai ser feito no Domingo 1 de julho Wink não a 24 de junho.
Em Julho o último dia do mês calha numa terça (31) vai-se considerar o último backup feito no domingo(29Jul)
Em Agosto a empresa está fechada, logo ninguém mete disco... fica só o cobian a fazer o backup para o Nas Wink Mas msm assim como o último dia do mês irá calhar numa sexta o backup de domingo que me interessa considerar é o do dia 2 de Setembro.
Salta Agosto Cool... fazemos só em setembro, o último dia (30) calha a um domingo logo considera-se esse como o backup que vão passar para disco externo... e por aí em frente...

O que me importa é que nos primeiros dias do mês habituem-se a guardar o backup... e com esta regra tenho sempre a garantia disso.
Se por um acaso deixarem passar duas semanas é que vai ser... lol vão ter backups completos de duas semanas... mas isso tb garanti com 2 disco externos de 450Gb, que vão sendo alternados. O máximo dos backups não chega a 90Gb... por isso é preciso esquecerem-se muito até ao fim do ano Wink
A minha garantia está no servidor, e sou eu que garanto... isto é ´só para criarem-se hábitos... percebeste?

No caso de erro de script, no script que fiz tem um aviso e gera relatório de erro... além de que a pessoa tem mesmo de verificar que os ficheiros foram criados e está tudo conforme... não vai ser só "põe a correr e esquece"...lol.

Inté Happy
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 6 Visitante(s)