Você está na página 1de 4

@echo off

set var1=bkp
set var2=_
echo %var1%%var2%%date:~4,2%%date:~7,2%%date:~12,2%%var2%
%time:~0,2%%time:~3,2%%time:~6,2%.%var1%

Salve como “exemplo.bat” e basta chamar o comando “exemplo” para exibir na tela
o resultado.

Boa sorte,

Douglas

thingol
Abr '07
Só completando o que o Douglas disse.

Se em um exemplo (que você digita na linha de comando) aparece algo como


“%DATE%”, para usar em uma batch você precisa duplicar o %. Coisas do MS-
DOS.

No exemplo:

%date:~4,2%

Na batch:

%date:~4,2%%

É por isso que o Douglas duplicou todos os % que apareciam no exemplo que
você citou.

RenataFA
Abr '07
Amigos, obrigada pela ajuda, mas ainda estou com problemas.

Veja o trecho do meu arquivo .bat que deve fazer o que pedi:

@echo off

set var1=bkp
set var2=_
set var3=.gbk
ren c:\sistemas\manager\dados\dados.gbk %var1%%var2%%date:~4,2%
%date:~7,2%%date:~12,2%%var2%%time:~0,2%%time:~3,2%%time:~6,2%
%var1%%var3%

Quando executo esse .bat, ele dá a seguinte mensagem de erro:

A sintaxe do comando está incorreta

Então eu fiz uns testes e descobri que se eu tirar do comando a parte que deve
pegar a hora, ou seja, se eu executar desta forma:

ren c:\sistemas\manager\dados\dados.gbk %var1%%var2%%date:~4,2%


%date:~7,2%%date:~12,2%%var2%%var1%%var3%

FUNCIONA! Então o problema deve estar nos parâmetros pra pegar o formato da
hora…

Alguma idéia de como seria a forma correta? Onde eu posso consultar quais os
parâmetros possíveis?! Ainda não entendi a lógica pra formatar a data e a hora

que ele usa… 

Grata, :roll:

douglasfs
Abr '07
O problema foi a hora atual do sistema, provavelmente você executou esse batch
antes das 10 não é ?

Ele interpretou como " 9" (espaço antes do 9) e ficou mais ou menos assim o seu
comando final

ren c:\sistemas\manager\dados\dados.gbk bkp_041807_ 95701.bkp

Com esse espaço em branco antes do “9” rola o problema descrito por você, um
workaround para isso seria colocar um zero antes da hora atual,
consequentemente :

@echo off

set var1=bkp
set var2=_
set var3=.gbk
set hora_atual=%time:~0,2%

rem gtr significa maior


if %hora_atual% gtr 9 goto FINALIZA
echo tratando hora
set hora_atual=0%time:~1,1%

:FINALIZA
echo finalizando
set resultado=%var1%%var2%%date:~4,2%%date:~7,2%%date:~12,2%%var2%
%hora_atual%%time:~3,2%%time:~6,2%.%var1%
ren c:\sistemas\manager\dados\dados.gbk %resultado%

Esse tratamento da data/hora seria mais ou menos assim :

Se você fizer “echo %date%”

Retornaria por exemplo : qua 04/18/2007

Para obter o 04 você faria “%date:~4,2%”, 4 porque é a quarta posição e 2 é a


quantidade de caracteres a partir da quarta posição, basicamente igual a substring
do Java.

Para consultar os parametros disponiveis basta escrever “set” no prompt do DOS,


ou então para facilitar a depuração coloque “echo %variavel%” para imprimir os
valores.

Não sou expert em batch, mas espero que isso tenha lhe ajudado em algo

[]s

Douglas

RenataFA
Abr '07
Douglas, mais uma vez obrigada por estar me ajudando… infelizmente ainda tô
fazendo alguma caquinha… Veja o meu .bat está abaixo:

@echo off

set var1=bkp
set var2=_
set var3=gbk
set hora=%time:~0,2%

if %hora% grt 9 goto CONTINUA


set hora=0%time:~1,1%

:CONTINUA
ren c:\sistemas\manager\dados\dados.gbk %var1%%var2%%date:~4,2%
%date:~7,2%%date:~12,2%%var2%%hora%%time:~3,2%%time:~6,2%%var1%.
%var3%
echo.
echo BACK-UP CONCLUIDO!!!
echo.

pause
exit

Qdo executo, a mensagem de erro é:

grt foi inexperado neste momento

O que será agora? 

Ah! E agora entendi como funciona pra pegar os pedacinhos da data, eu não
estava entendendo pq não tinha percebido que vinha escrito o nome do dia da
semana antes e então começava a contar na posição errada…

douglasfs
Abr '07
Na linha “if %hora% grt 9 goto CONTINUA”, é só substituir o “grt” por “gtr”

Boa sorte,

Douglas