Logo Hardware.com.br
rpereira
rpereira Veterano Registrado
1.7K Mensagens 8 Curtidas

Como faço isso em BAT? - if exist xxx.exe goto x - Monitorar existência de um arquivo

#1 Por rpereira 13/10/2010 - 21:05
Pessoal,

Preciso que uma máquina execute uma ação quando for constatada a existência de um arquivo determinado.
Fiz um BAT com o seguinte:

---------------------------------------
:INICO
if exist arquivo.ext goto SIM
goto início
:SIM
ren arquivo.ext arquivo2.ext2
goto INICO
---------------------------------------

A idéia é a seguinte: o sistema ficar continuamente monitorando se existe o tal ARQUIVO.EXT. Quando um arquivo com esse nome for copiado/criado na pasta, será executada uma ação. Vou copiar esse arquivo na pasta Inicializar.

Obs: para rodar o arquivo, tou usando um "self-installing package" (criado pelo Iexpress do windows), ou seja, é como se fosse um BAT compilado para EXE, para evitar que alguém modifique o arquivo. Isso tb me possibilita que o procedimento rode em background (sem nenhuma janela aparecendo).

Até funcionou, mas tive 2 problemas graves:

1) Queria dar uma pausa de cerca de 10 segundos entre cada checagem, já q do jeito q fiz o loop ocorre muito rápido, consumindo recursos do processador desnecessariamente (50% num C2D). Não sei qual comando usar. Antigamente (win95) eu usava o comando CHOICE, que tinha uma opção de pausa por determinado tempo. Mas o CHOICE foi excluído do Windows (uso o Windows XP).

2) Quando mando desligar a máquina ou fazer logoff com o arquivo rodando, o sistema mostra um erro, dizendo q o programa não pode ser encerrado corretamente, e perguntando se eu desejo finalizar (forçar o fechamento) do programa.

O que vcs me sugerem? (não entendo nada de programação)
:-(
athlon.64.3000+ kingston.2gb seagate.7200.12.500gb gforce5200 positivo.w1942st
ex: duron.1800 k7s5a OCZr3.2.512mb seagate.40gb gf2mx400.64mb lg. 4163b-dvd-ram lg.16x.dvd-rom lg.32x.cdrw sb.Live!.5.1 PlayTv.mpeg2 syncmaster.753.dfx
Responder
Fergo
Fergo Highlander Registrado
9.3K Mensagens 1.1K Curtidas
#3 Por Fergo
13/10/2010 - 22:43
Conheço duas formas de fazer um delay/sleep/wait no Windows XP.

Maneira "feia"
Inserir um comando "ping" no endereço local. É possível fazer uma "pausa" de 30 segundos com o seguinte comando ping:
PING -n 31 127.0.0.1 > nul
É uma tremenda gambiarra, mas funciona bem

Maneira mais correta

Instalando o Windows Server 2003 RK. Apesar de ser para o Windows Server, ele funciona no XP perfeitamente. Dentre outros recursos ele instala um "sleep.exe", que você pode chamar no seu bat para fazer a pausa:
SLEEP 60

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en

Ambos os métodos devem solucionar seus 2 problemas.

Fergo
Site pessoal www.fergonez.net
Portfolio
www.fbirck.com
Artigos
Informática
rpereira
rpereira Veterano Registrado
1.7K Mensagens 8 Curtidas
#4 Por rpereira
14/10/2010 - 14:42
geloh disse:
Você só quer renomear o arquivo "arquivo.ext" para "arquivo2.ext2"? Mas nao entendi porque mudou a extensão. Se for só isso posso programar algo pra você em pascal.


Na verdade, o final daquela linha era só um exemplo. :P
O que eu preciso é rodar um outro comando (que está em BAT transformado em EXE tb). Algo como:

IF EXIST ARQUIVO1.EXE ARQUIVO2.EXE (rodar o ARQUIVO2.EXE)

Posso te mandar o original por MP? É fácil fazer isso? Será q eu conseguiria resolver os 2 problemas q relatei?

Fergo disse:
Conheço duas formas de fazer um delay/sleep/wait no Windows XP.
Maneira "feia"
Inserir um comando "ping" no endereço local. É possível fazer uma "pausa" de 30 segundos com o seguinte comando ping:
PING -n 31 127.0.0.1 > nul
É uma tremenda gambiarra, mas funciona bem
Maneira mais correta
Instalando o Windows Server 2003 RK. Apesar de ser para o Windows Server, ele funciona no XP perfeitamente. Dentre outros recursos ele instala um "sleep.exe", que você pode chamar no seu bat para fazer a pausa:
SLEEP 60
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en Fergo


Cara! :P
Por mais incrível q pareça, eu tava usando exatamente a solução galega com o PING! Só não tinha botado isso escrito acima, pq não deu muito certo. Hehe.
Na verdade, qdo uso o PING, o problema (2) se torna maior. Aparecem 2 erros de programas q não podem ser fechados, entre eles o PING.EXE.
A a maneira correta eu não tenho como instalar na máquina. frown.png

Caso seja interessante eu dar uma estudada em algo básico de programação, qual linguagem seria a ideal pra esse de coisa em ambiente Windows? Por onde devo começar?
athlon.64.3000+ kingston.2gb seagate.7200.12.500gb gforce5200 positivo.w1942st
ex: duron.1800 k7s5a OCZr3.2.512mb seagate.40gb gf2mx400.64mb lg. 4163b-dvd-ram lg.16x.dvd-rom lg.32x.cdrw sb.Live!.5.1 PlayTv.mpeg2 syncmaster.753.dfx
Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal