Пакет Windows: сон

99

Как мне получить пакет Windows script, чтобы подождать несколько секунд?

sleep и wait, похоже, не работают (непризнанная команда).

Теги:
batch-file
scripting

12 ответов

150
Лучший ответ

Вы можете попробовать

ping -n XXX 127.0.0.1 >nul

где XXX - это количество секунд ожидания, плюс один.

  • 2
    Хороший маленький взломать
  • 2
    Клэй Калверт дает объяснение этой технике. Обратите внимание, что -n используется для указания количества запросов. ping по умолчанию ожидает одну секунду для каждого ответа, даже если он приходит за меньшее время.
Показать ещё 8 комментариев
135
timeout /t 10 /nobreak > NUL

/t указывает время ожидания в секундах

/nobreak не будет прерывать таймаут, если вы нажмете кнопку (кроме CTRL-C)

> NUL будет подавлять вывод команды

  • 8
    Святое дерьмо! Я понятия не имел, что это было там. ТАК нужно сортировать эти ответы по рейтингу. Я почти пропустил это.
  • 2
    Это то, что я искал и нигде не мог найти. +1
Показать ещё 6 комментариев
133

Я не знаю, почему эти команды не работают для вас, но вы также можете попробовать timeout

timeout <delay in seconds>
  • 0
    У меня обычная установка Windows XP. я думаю, "сон" - это дополнение, которое вы должны установить. timeout работает отлично, хотя, спасибо!
  • 0
    Ooh! Я не знал о тайм-ауте. К сожалению, он недоступен в Windows 2000, хотя в настоящее время это, вероятно, не является проблемой. Если это так, выбор будет работать и на предыдущих версиях (даже в DOS).
Показать ещё 6 комментариев
12

У Microsoft есть функция сна, которую вы можете вызвать напрямую.

    Usage:  sleep      time-to-sleep-in-seconds
            sleep [-m] time-to-sleep-in-milliseconds
            sleep [-c] commited-memory ratio (1%-100%)

Вы можете просто сказать sleep 1, например, чтобы спать в течение 1 секунды в вашей партии script.

IMO Ping немного взломан для этого варианта использования.

  • 9
    "C: \ Documents and Settings \ Пользователь> sleep 'sleep' не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл." Windows немного взломать для этого варианта использования .. LOL
  • 0
    Я мог бы использовать «сон» на моей машине (Windows 7).
Показать ещё 4 комментария
12

Ожидание 10 секунд:

choice /T 10 /C X /D X /N
  • 0
    Я буду использовать это с > NUL чтобы подавить весь вывод.
  • 0
    Вообще-то, у меня нет ни таймаута, ни выбора в этой установке XP, с которой я работаю ... очень странно. пинг это.
Показать ещё 2 комментария
6

Для чистого cmd.exe script вы можете использовать этот фрагмент кода, который возвращает текущее время в hundreths секунд.

:gettime
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

Затем вы можете использовать его в цикле ожидания, как это.

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

И соединяя все части:

@echo off
setlocal enableextensions enabledelayedexpansion

call :gettime t1
echo %t1%
call :wait %1
call :gettime t2
echo %t2%
set /A tt = (t2-t1)/100
echo %tt%
goto :eof

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

:gettime 
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

Для более подробного описания команд, используемых здесь, проверьте HELP SET и HELP CALL информацию.

  • 3
    Но это цикл «занятого ожидания», который без необходимости сжигает процессорное время. На мой взгляд, лучше всего вызывать команду, которая ждет. Пожалуйста, рассмотрите эту ссылку на SO, чтобы узнать больше. Чтобы уменьшить это в вашем скрипте, вы можете вставить timeout x >nul после метки :wait (заменить x на количество секунд ожидания)
4

Я полагаюсь на JScript. У меня есть JScript файл:

// This is sleep.js
WScript.Sleep( WScript.Arguments( 0 ) );

И внутри командного файла я запускаю его с CScript (обычно это %SystemRoot%\system32\cscript.exe)

rem This is the calling inside a BAT file to wait for 5 seconds
cscript /nologo sleep.js 5000
4

Windows 2003 Resource Kit имеет командный файл sleep. Если вы когда-нибудь переместитесь на PowerShell, вы можете использовать:

Start-Sleep -s <time to sleep>

Или что-то в этом роде.

  • 0
    ... или powershell -command "Start-Sleep -Milliseconds 5000">nul
3

Хех, Windows - это... интересно. Это работает:

choice /T 1 /d y > NUL

choice представляет приглашение с просьбой о да или нет. /d y позволяет выбрать да. /t 1 заставляет его ждать секунду, прежде чем вводить его. > NUL выдает кавычки.

  • 7
    Да, но у вас должна быть Windows, которая спрашивает «Да» или «Нет». На моей голландской Windows она спрашивает «Ja» или «Ни», так что «Y» не будет работать. Вот почему я указал точный выбор в своем ответе выше. И вы можете просто добавить / N, чтобы предотвратить отображение подсказки.
  • 0
    @GolezTrol: все еще нужно "> NUL", чтобы подавить "X" из отображения. ну, и я не осознавал важность "/ C", пример, который я нашел в Интернете, имел это
Показать ещё 1 комментарий
2

Я только написал свой сон, который вызвал Win32 функция Sleep API.

  • 1
    / * Скомпилируйте это с помощью ms vc6, cl.exe Sleep.c, например Sleep.exe 100 .. sleep на 100 мс * / #include <WinSock.h> int main (int argc, char * argv []) {Sleep ( ARGC <2 1000: atoi (ARGV [1])); вернуть 0; }
1

RJLsoftware имеет небольшую утилиту под названием DelayExec.exe. С этим вы можете выполнить отложенное начало любой программы в пакетах и ​​в реестре Windows (наиболее полезно в... Windows/.../Запустить реестр).

Пример использования:

delayexec "C:\WINDOWS\system32\notepad.exe" 10

или как команда спящего режима:

delayexec "nothing" 10
1

Лично я использую Perl one-liner:

perl -e "sleep 10;"

для 10-секундного ожидания. Скорее всего, вы уже установили Perl на машине разработки как часть вашей установки git; если нет, вам придется установить его, например, из ActiveState или Strawberry, но это одна из тех вещей, которые я устанавливаю в любом случае.

В качестве альтернативы вы можете установить команду сна из GnuWin32.

  • 0
    ах, это не одна из тех вещей, которые я устанавливаю = P. я даже не хочу устанавливать утилиту sleep.exe, так что это немного.
  • 1
    Руби тоже ruby -e "sleep 10" : ruby -e "sleep 10" - и это на один символ меньше :)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню