Melhor maneira de esperar alguns segundos em um arquivo bat? [duplicado]

11

Aqui está uma maneira haxxorish de fazer uma pausa por um segundo em um arquivo de lote:

PING 400.500.600.700 > NUL

Eu pesquisei no Google, mas não tenho certeza se há algum melhor ... alguma idéia? :)

    
por Srekel 09.07.2009 / 16:49

8 respostas

10

Você pode usar as opções "escolha padrão" e "tempo limite" do comando de escolha interna para criar um atraso.

@echo off
echo Hi, I'm doing some stuff
echo OK, now I need to take a breather for 5 seconds...
choice /d y /t 5 > nul
echo Times up! Here I go again...
    
por 09.07.2009 / 17:02
27

A maneira correta de fazer isso é usar o timeout , introduzido no Windows 2000.

Para esperar 30 segundos:

timeout /t 30

O tempo limite será interrompido se o usuário pressionar qualquer tecla; no entanto, o comando também aceita o comutador opcional /nobreak , que efetivamente ignora qualquer coisa que o usuário possa pressionar, exceto um CTRL-C explícito:

timeout /t 30 /nobreak

Além disso, se você não quiser que o comando imprima sua contagem regressiva na tela, poderá redirecionar sua saída para NUL :

timeout /t 30 /nobreak > NUL
    
por 26.09.2012 / 21:08
4
@echo off
echo It is time for liftoff.
timeout /t 5
echo Commencing crash sequence.
timeout /t 5

Bater uma tecla sobre a contagem regressiva é a única desvantagem.

    
por 26.09.2012 / 20:39
3

Aqui está o que eu tenho usado como substituto para sleep.exe ,

@ping -n 1 -w 1000 0.0.0.1 > NUL  

Altere -n x para aguardar (aproximadamente) x segundos.

    
por 09.07.2009 / 17:10
2

Aparentemente o kit de recursos do windows tem o comando sleep nele. Outros Sites também recomendam o uso da opção .....

    
por 09.07.2009 / 16:58
1

Comando CHOICE com timer funciona bem ...

ESCOLHA / C: x / T: x, 10 > NUL

Existem também "programas" que podem ser executados como o WAIT e o SLEEP, etc.

Espero que isso ajude.

    
por 09.07.2009 / 17:08
1

O ping (acima) é bom - mas só funciona se estiver conectado a uma rede.

Um pouco de script que atrasará está abaixo:

@echo off

set / a secondsend =% TIME: ~ 6,2% + 10

se% segundosend% GTR 59 definido / a segundosend = segundosend-60

: waithere

se% TIME: ~ 6,2% NEQ% segundosend% goto waithere

Isso fará uma pausa entre 9 e 10 segundos (o primeiro segundo não é exato devido ao uso do comando TIME e pode estar na metade de um segundo antes de você começar).

Se funcionar, configure 'secondsend' para o segundo atual do relógio do PC e, em seguida, adicione 10 a ele (o atraso). Se for maior que 59, descontando 60 para o próximo minuto. Em seguida, há um loop que verifica o segundo atual com 'secondsend' - uma vez que eles correspondam ao script continua.

Se você quiser atrasar por um período diferente 2-59, então altere o 10 na segunda linha (eu digo 2-59, já que o primeiro segundo pode não ser um segundo completo, então 2 pode ser digamos, 1,2 segundo, por exemplo ).

Desculpe, é muito longo, mas pensei em explicar como a rotina funciona.

    
por 17.11.2009 / 09:01
-2

Acabei de escrever um exe simples em C #. Simplesmente usando o statis System.Threading.Sleep, e pegue o argumento da linha de comando e converta-o para um inteiro.

Demorou 5 minutos para fazer.

    
por 02.02.2011 / 17:38