Как мне получить пакет Windows script, чтобы подождать несколько секунд?
sleep
и wait
, похоже, не работают (непризнанная команда).
Как мне получить пакет Windows script, чтобы подождать несколько секунд?
sleep
и wait
, похоже, не работают (непризнанная команда).
Вы можете попробовать
ping -n XXX 127.0.0.1 >nul
где XXX - это количество секунд ожидания, плюс один.
Я не знаю, почему эти команды не работают для вас, но вы также можете попробовать timeout
timeout <delay in seconds>
timeout /t 10 /nobreak > NUL
/t
указывает время ожидания в секундах
/nobreak
не будет прерывать таймаут, если вы нажмете кнопку (кроме CTRL-C)
> NUL
будет подавлять вывод команды
Ожидание 10 секунд:
choice /T 10 /C X /D X /N
У 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 немного взломан для этого варианта использования.
Для чистого 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
информацию.
Windows 2003 Resource Kit имеет командный файл sleep
. Если вы когда-нибудь переместитесь на PowerShell, вы можете использовать:
Start-Sleep -s <time to sleep>
Или что-то в этом роде.
Я полагаюсь на 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
Хех, Windows - это... интересно. Это работает:
choice /T 1 /d y > NUL
choice
представляет приглашение с просьбой о да или нет. /d y
позволяет выбрать да. /t 1
заставляет его ждать секунду, прежде чем вводить его. > NUL
выдает кавычки.
Я только написал свой сон, который вызвал Win32 функция Sleep API.
Лично я использую Perl one-liner:
perl -e "sleep 10;"
для 10-секундного ожидания. Скорее всего, вы уже установили Perl на машине разработки как часть вашей установки git; если нет, вам придется установить его, например, из ActiveState или Strawberry, но это одна из тех вещей, которые я устанавливаю в любом случае.
В качестве альтернативы вы можете установить команду сна из GnuWin32.
RJLsoftware имеет небольшую утилиту под названием DelayExec.exe. С этим вы можете выполнить отложенное начало любой программы в пакетах и в реестре Windows (наиболее полезно в... Windows/.../Запустить реестр).
Пример использования:
delayexec "C:\WINDOWS\system32\notepad.exe" 10
или как команда спящего режима:
delayexec "nothing" 10