Ajuda com comandos DOS [RESOLVIDO]

12 respostas
R

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

12 Respostas

D

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

T

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.

R

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:

D

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

R

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…

D

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

Boa sorte,

Douglas

T

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.)

R

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:

L

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 ([email removido])
MP3-engine: Lame

  • Invalid argument f:\190907_.

  • Execute mixmp3 -rus to get russian help

L

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

L

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á.

L

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.

Criado 18 de abril de 2007
Ultima resposta 3 de jun. de 2008
Respostas 12
Participantes 4