Ajuda com comandos DOS [RESOLVIDO]

Olá pessoALL! :stuck_out_tongue:

Fiz um arquivinho de lote (.bat) simples aqui pro meu cliente apenas clicar e ele fazer o backup.

Eu queria que sempre o nome do arquivo gerado pelo backup fosse algo como:

bkp_<data>_<hora>.bkp

Então fucei para encontrar como pegar a data e hora do sistema e usar isso no DOS. Por fim, achei a dica este link (http://forum.abril.com.br/info/forum.php?topico=115818).

Só que aqui em ksa simplesmente não funciona nem o mais simples dos exemplos descrito! Tô achando pra lá de estranho pq no micro da empresa eu lembro que testei e funcionou!

Alguém tem alguma idéia do que pode ser? Ou sabe de algum outro jeito de fazer isso? :roll:

Máquina de casa:
XP Professional
Versão 2002
Service Pack 2

Máquina da empresa:
<assim que eu chegar na empresa amanhã cedo eu olho e coloco aqui, mas é algo parecido se não for exatamente o mesmo>

Grata,
Renata

O meu Windows XP tem a mesma configuração que a sua, basta criar um arquivo com a extensão “.bat” e pronto.

@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

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.

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… :frowning:

Grata, :roll:

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

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? :cry:

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…

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

Boa sorte,

Douglas

Não é por nada não, mas será que você não poderia instalar no seu cliente o programa Perl ou Python?
Ambos são mais adequados que o DOS para executar scripts que contenham esse tipo de lógica. (Você já viu como é que o fato de usar "%%DATE%% já deu problemas :stuck_out_tongue: )

Alternativamente, você pode aprender JScript ou VBScript, se não puder fazer esse tipo de instalação. Aí você pode criar um script com extensão “js” ou “vbs” e executar esse script com o comando:

cscript seuprograma.js

O cscript, também conhecido por “Windows Script Host” é um programa que interpreta scripts JScript ou VBScript e normalmente já vem instalado no Windows. (OK, pode ser que no seu cliente o “Windows Script Host” tenha sido desabilitado ou desinstalado por motivos de segurança. Se for isso, então instale o Perl ou o Python, que podem ser baixados de http://www.activestate.com )

(Eu tenho uma certa ojeriza por batchs, embora tenha já escrito muitas delas, porque você é obrigado a usar “goto”. “Goto” para mim é um sobrenome de japonês, não deveria ser usado em programação do dia-a-dia.)

Douglas!!! Que vergonha!!! :oops: :oops: :oops:

Eu olhei tanto e não vi isso!!!

Muito obrigada pela ajuda e pela paciência tb.!!! :wink:

Então Thingol, com certeza devem existir ferramentas superiores para fazer e executar scripts, mas no caso, é um cliente pequeno, um único computador, um sisteminha pequeno feito em delphi com BD em FB. Fiz o .bat (que eu sempre usei e que nunca me deixou na mão)… a intenção é apenas que da próxima vez que der pau e não tiver bkp eu possa dizer: “Não tem pq vcs não fizeram, pq é só clicar aqui que ele faz o bkp…”

Então de fato foi suficiente… legal saber que existem outras coisas pra isso, se eu precisar não vou me esquecer das dicas… mas não acuse tanto o bash, não deu problema nenhum com o %date%, o problema era a minha burrice…rs…

T+ meninos, e obrigada mais uma vez! :lol:

estou tentando criar aki um batch para criar o nome do arquivo com data e hora atual, mas está gerando espaços entre a data e a hora, usei a mesma sintaxe.

F:>teste2
‘echooff’ não é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.

F:>set var1=bkp

F:>set var2=_

F:>set var3=.gbk

F:>set hora_atual=11

F:>rem gtr significa maior

F:>if 11 GTR 9 goto FINALIZA

F:>echo finalizando
finalizando

F:>set resultado=190907_ 11 1842

F:>mixmp3 f:\190907_ 11 1842 .mp3

MP3-encoder of signal from soundcard. Version 1.0.7, 13.11.2000
© Dmitry Lesnikov (dlesnikov@mail.ru)
MP3-engine: Lame

  • Invalid argument f:\190907_.

  • Execute mixmp3 -rus to get russian help

Estou usando este código:
@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=%date:~4,2%%date:~7,2%%date:~12,2%%var2%%hora_atual%%time:~3,2%%time:~6,2%

mixmp3 f:%resultado%.mp3

Aguardo uma ajuda, a idéia é para fazer gravação de todo audio que entrar pela placa de som, mas no momento que o micro for desligado e religado criar arquivos com nomes diferentes, para não sobescrever o anterior. De i´nicio tive problemas com a hora antes das 10:00 e agora usei a dica do douglasfs, mas tá gerando espaços. e não consegui ainda resolver.
Grato desde já.

Consegui, descobrir, depois de muito tempo, no declarar as variáveis, não se pode deixar espaços, senão estes serão escritos quando vc chamar ela.
“set var1=bkp”
"set var2=_"aqui não pode ter espaço para o #enter# "
"set var3=.gbk

Por este motivo se criava o espaço ao montar o nome.