Пауза в пакетном файле
Материал из OSZone.net wiki.
Иногда бывает нужно приостановить выполнение пакетного файла, чтобы предыдущая команда наверняка отработала. Сделать это можно несколькими способами.
Содержание |
Команда ping
ping -n seconds 127.0.0.1 > nul
где seconds - желаемое число секунд +1.
Справка по команде: ping /?. См. также комментарии в обсуждении.
Утилита sleep.exe
sleep [seconds]
где [seconds] - желаемое число секунд.
Утилита Nircmd
nircmd wait [milliseconds]
где [milliseconds] - желаемое число миллисекунд (1/1000 секунды).
Ещё об использовании NirCmd в статье Создание ярлыков при установке системы
Утилита Choice
Choice.exe входит в состав Resource Kit
Choice.com можно взять из состава Windows 9x/ME
choice /n /t seconds /d y
где seconds - желаемое число секунд.
Использование Windows Script Host (WSH)
Пример скрипта на JScript (sleep.js):
WScript.Sleep(WScript.Arguments(0))
Использование:
cscript //nologo sleep.js [milliseconds]
где [milliseconds] - желаемое число миллисекунд (1/1000 секунды).
Пример совмещения cmd-скрипта с js-скриптом в одном гибридном скрипте (sleep-js.cmd):
@set @x=0 /* @echo off echo PAUSE BEGIN :: Сдесь делаем паузу 3 секунды cscript //nologo /e:jscript "%~f0" 3000 echo PAUSE END :: Конец CMD-части exit /b */ // JS-часть WScript.Sleep(WScript.Arguments(0))
Пакетный файл
Использование (пауза на 1-60 секунд):
call :sleep пауза
@echo off
rem Пример использования
rem Некоторые действия
echo Сейчас %time:~0,-3%
rem пауза на 15 секунд
call :sleep 15
rem Другие действия
echo Сейчас %time:~0,-3%
goto :EOF
:sleep
echo Пауза на %1 секунд...
set /a ftime=%time:~6,-3%+%1
if %ftime% GEQ 60 set /a ftime-=60
:loop
set ctime=%time:~6,-3%
if /i %ftime% NEQ %ctime% goto :loop
goto :EOF

