Ajuda com comandos DOS [RESOLVIDO]  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Olá pessoALL!

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?

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

[]'s, Renata
[Email]
douglasfs
JavaEvangelist
[Avatar]

Membro desde: 31/12/2002 17:50:02
Mensagens: 305
Localização: São Paulo / Brasil
Offline

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



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

Boa sorte,

Douglas

SCJP 1.4, SCWCD 1.4, SCBCD 5.0 beta
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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.
[WWW]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Amigos, obrigada pela ajuda, mas ainda estou com problemas.

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



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:



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,

[]'s, Renata
[Email]
douglasfs
JavaEvangelist
[Avatar]

Membro desde: 31/12/2002 17:50:02
Mensagens: 305
Localização: São Paulo / Brasil
Offline

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



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 :



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

SCJP 1.4, SCWCD 1.4, SCBCD 5.0 beta
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

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



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

[]'s, Renata
[Email]
douglasfs
JavaEvangelist
[Avatar]

Membro desde: 31/12/2002 17:50:02
Mensagens: 305
Localização: São Paulo / Brasil
Offline

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

Boa sorte,

Douglas

SCJP 1.4, SCWCD 1.4, SCBCD 5.0 beta
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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 )

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.)
[WWW]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Douglas!!! Que vergonha!!!

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

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


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!

[]'s, Renata
[Email]
LucianoSturza
What is classpath?
[Avatar]

Membro desde: 19/09/2007 10:55:30
Mensagens: 5
Localização: São vicente do Sul
Offline

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
(c) Dmitry Lesnikov (dlesnikov@mail.ru)
MP3-engine: Lame

* Invalid argument f:\190907_.

* Execute mixmp3 -rus to get russian help

[Email] [MSN]
LucianoSturza
What is classpath?
[Avatar]

Membro desde: 19/09/2007 10:55:30
Mensagens: 5
Localização: São vicente do Sul
Offline

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
[Email] [MSN]
LucianoSturza
What is classpath?
[Avatar]

Membro desde: 19/09/2007 10:55:30
Mensagens: 5
Localização: São vicente do Sul
Offline

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á.
[Email] [MSN]
LucianoSturza
What is classpath?
[Avatar]

Membro desde: 19/09/2007 10:55:30
Mensagens: 5
Localização: São vicente do Sul
Offline

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.
[Email] [MSN]
 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team