Инструмент Windows Snipping может захватывать экран, но иногда я хочу сделать снимок экрана через пять секунд, например, для получения изображения, отображаемого веб-камерой. (Запустите сценарий и улыбнитесь в камеру, например.)
Как мне заснуть на 5 секунд в пакетном файле?
Один взломать (неправильно) использовать команду ping:
ping 127.0.0.1 -n 6> nul
Пояснение:
-
ping
— системная утилита, отправляющая запросы ping.ping
доступен во всех версиях Windows. -
127.0.0.1
— это IP-адрес localhost. Гарантируется, что этот IP-адрес всегда будет разрешаться, быть доступным и немедленно отвечать на эхо-запросы. -
-n 6
указывает, что должно быть 6 эхо-запросов. Между каждым эхо-запросом существует задержка в 1 с, поэтому для задержки в 5 с вам нужно отправить 6 эхо-запросов. -
> nul
подавить выводping
, перенаправив его наnul
.
Я очень удивлен, что никто не упомянул:
C: > timeout 5
NB Однако обратите внимание (спасибо, Дэн!), что таймаут 5
означает:
Спать где угодно от 4 до 5 секунд
Это можно проверить эмпирически, поместив следующее в пакетный файл, запустив его несколько раз и вычислив разницу во времени между первым и вторым эхо
s:
@echo offecho% time% timeout 5> NULecho% time%
Я очень удивлен, что никто не упомянул:
C: > таймаут 5 код>
NB Однако обратите внимание (спасибо, Дэн!), что таймаут 5
означает:
Спать где угодно от 4 до 5 секунд
Это можно проверить эмпирически, поместив следующее в пакетный файл, запустив его несколько раз и вычислив разницу во времени между первым и вторым эхо
s:
@echo offecho% time% timeout 5> NULecho% time%
Попробуйте команду Choice. Он существует с MSDOS 6.0 и должен помочь.
Используйте параметр/T, чтобы указать тайм-аут в секундах, и параметр/D, чтобы указать выбор по умолчанию и игнорировать выбранный вариант.
Единственное, что может проблема заключается в том, что пользователь вводит один из выбранных символов до истечения периода ожидания. Частичный обходной путь состоит в том, чтобы запутать ситуацию — используйте аргумент/N, чтобы скрыть список допустимых вариантов и иметь только 1 символ в наборе вариантов, чтобы было меньше вероятности того, что пользователь введет правильный выбор перед таймаут истекает.
Ниже приведен текст справки по Windows Vista. Я думаю, что то же самое в XP, но посмотрите текст справки на компьютере XP, чтобы убедиться.
C: > CHOICE/? CHOICE [/C choices] [ /N] [/CS] [/T timeout/D choice] [/M text] Описание: этот инструмент позволяет пользователям выбрать один элемент из списка вариантов и возвращает индекс выбранного варианта. Список параметров:/C choices Определяет список вариантов для создания. Список по умолчанию - «YN». /N Скрывает список вариантов в подсказке. Сообщение перед подсказкой отображается, и варианты все еще доступны. /CS Позволяет выбирать варианты с учетом регистра. По умолчанию утилита нечувствительна к регистру. /T тайм-аут Количество секунд для паузы перед выбором по умолчанию. Допустимые значения: от 0 до 9999. Если указан 0, паузы не будет и будет выбран вариант по умолчанию. /D выбор Задает выбор по умолчанию через nnnn секунд. Символ должен быть в наборе вариантов, заданном параметром/C, а также должен указывать nnnn с/T. /M текст Задает сообщение, которое будет отображаться перед подсказкой. Если не указан, утилита отображает только подсказку. /? Отображает это справочное сообщение. ПРИМЕЧАНИЕ. Переменная среды ERRORLEVEL установлена на индекс ключа, который был выбран из набора вариантов. Первый из перечисленных вариантов возвращает значение 1, второй - значение 2 и так далее. Если пользователь нажимает клавишу, выбор которой недопустим, инструмент издает предупреждающий звуковой сигнал. Если инструмент обнаруживает состояние ошибки, он возвращает значение ERRORLEVEL, равное 255. Если пользователь нажимает CTRL + BREAK или CTRL + C, инструмент возвращает значение ERRORLEVEL, равное 0. Когда вы используете параметры ERRORLEVEL в пакетной программе, перечислите их в порядке убывания. порядок. Примеры: ВЫБОР/? CHOICE/C YNC/M «Нажмите Y для Да, N для Нет или C для отмены». CHOICE/T 10/C ync/CS/D y CHOICE/C ab/M «Выберите a для варианта 1 и b для варианта 2». CHOICE/C ab/N/M «Выберите a для варианта 1 и b для варианта 2»
Попробуйте команду «Выбор» . Он существует с MSDOS 6.0 и должен помочь.
Используйте параметр/T, чтобы указать тайм-аут в секундах, и параметр/D, чтобы указать выбор по умолчанию и игнорировать выбранный вариант.
Единственное, что может проблема заключается в том, что пользователь вводит один из выбранных символов до истечения периода ожидания. Частичный обходной путь состоит в том, чтобы запутать ситуацию — используйте аргумент/N, чтобы скрыть список допустимых вариантов и иметь только 1 символ в наборе вариантов, чтобы было меньше вероятности того, что пользователь введет правильный выбор перед таймаут истекает.
Ниже приводится текст справки по Windows Vista. Я думаю, что то же самое и в XP, но посмотрите текст справки на компьютере XP, чтобы убедиться.
C: > CHOICE/? CHOICE [/C choices] [/N] [/CS] [/T timeout/D choice] [/M text] Описание: Этот инструмент позволяет пользователям выбрать один элемент из списка вариантов и возвращает индекс выбранного варианта. Список параметров:/C choices Определяет список вариантов, который будет создан. Список по умолчанию - «YN». /N Скрывает список вариантов в подсказке. Сообщение перед подсказкой отображается, и варианты все еще доступны. /CS Позволяет выбирать варианты с учетом регистра. По умолчанию утилита нечувствительна к регистру. /T тайм-аут Количество секунд для паузы перед выбором по умолчанию. Допустимые значения: от 0 до 9999. Если указан 0, паузы не будет и будет выбран вариант по умолчанию. /D выбор Задает выбор по умолчанию через nnnn секунд. Символ должен быть в наборе вариантов, заданном параметром/C, а также должен указывать nnnn с/T. /M текст Задает сообщение, которое будет отображаться перед подсказкой. Если не указан, утилита отображает только подсказку. /? Отображает это справочное сообщение. ПРИМЕЧАНИЕ. Переменная среды ERRORLEVEL установлена на индекс ключа, который был выбран из набора вариантов. Первый из перечисленных вариантов возвращает значение 1, второй - значение 2 и так далее. Если пользователь нажимает клавишу, выбор которой недопустим, инструмент издает предупреждающий звуковой сигнал. Если инструмент обнаруживает состояние ошибки, он возвращает значение ERRORLEVEL, равное 255. Если пользователь нажимает CTRL + BREAK или CTRL + C, инструмент возвращает значение ERRORLEVEL, равное 0. Когда вы используете параметры ERRORLEVEL в пакетной программе, перечислите их в порядке убывания. порядок. Примеры: ВЫБОР/? CHOICE/C YNC/M «Нажмите Y для Да, N для Нет или C для отмены». CHOICE/T 10/C ync/CS/D y CHOICE/C ab/M «Выберите a для варианта 1 и b для варианта 2». CHOICE/C ab/N/M «Выберите a для варианта 1 и b для варианта 2»
Следующий прием позволяет вам спать на 5 секунд
ping -n 6 127.0.0.1> nul
Поскольку ping ждет секунду между пингами, вы должны указать на один больше, чем вам нужно.
Следующие hack, позвольте вам спать на 5 секунд
ping -n 6 127.0.0.1> nul
Так как ping ждет секунду между пингов, вы должны указать на один больше, чем вам нужно.
Если в вашей системе установлен PowerShell , вы можете просто выполнить эту команду:
powershell -command "Start-Sleep -s 5"
Изменить: люди подняли проблему, из-за которой время, необходимое Powershell для запуска, значительно по сравнению с тем, как долго вы пытаетесь ждать. Если важна точность времени ожидания (т. Е. Одна или две дополнительные задержки недопустимы), вы можете использовать этот подход:
powershell -command "$ sleepUntil = [ DateTime] :: Parse ('% date%% time%'). AddSeconds (5); $ sleepDuration = $ sleepUntil.Subtract ((дата получения)). TotalMilliseconds; start-sleep -m $ sleepDuration "
Для этого требуется время, когда была введена команда Windows, и сценарий PowerShell отключается до 5 секунд после этого времени. Таким образом, пока Powershell занимает время для начала меньше, чем продолжительность сна, этот подход будет работать (на моем компьютере это около 600 мс).
Если в вашей системе есть PowerShell, вы можете просто выполнить эту команду:
powershell -command "Start-Sleep -s 5"
Изменить: люди подняли проблему, из-за которой время, необходимое Powershell для запуска, значительно по сравнению с тем, как долго вы пытаетесь ждать. Если важна точность времени ожидания (т.е. одна или две дополнительные задержки недопустимы), вы можете использовать этот подход:
powershell -command "$ sleepUntil = [DateTime] :: Parse ('% date %% time% '). AddSeconds (5); $ sleepDuration = $ sleepUntil.Subtract ((дата получения)). TotalMilliseconds; start-sleep -m $ sleepDuration "
Для этого требуется время, когда была введена команда Windows, и сценарий PowerShell отключается до 5 секунд после этого времени. Таким образом, пока Powershell занимает время для запуска меньше, чем продолжительность сна, этот подход будет работать (на моем компьютере это около 600 мс).
Вы можете сделать это с помощью timeout
:
Это будет видно: timeout 5
Это не будет видно таймаут 5> nul
Вы можете сделать это с помощью тайм-аут
:
Это будет видно: тайм-аут 5
Это не будет видно тайм-аут 5> nul
Разве мы не можем сделать waitfor/T 180
?
waitfor/T 180 pause
приведет к ошибке «ОШИБКА: время ожидания ожидания паузы истекло».
waitfor/T 180 paus e> nul
сметет эту «ошибку» под коврик
Команда waitfor
должна присутствовать в ОС Windows после Win95
Раньше я загружал исполняемый файл с именем sleep
, который будет работать в командной строке после того, как вы поместите его в свой путь.
Например, : выключение сна -r -f/m \ yourmachine
, хотя для выключения теперь встроена опция -t
Разве мы не можем сделать waitfor/T 180
?
waitfor/T 180 pause
приведет к сообщению «ОШИБКА: истекло время ожидания паузы».. «
waitfor/T 180 pause> nul
сметет эту» ошибку «под ковер
Команда waitfor
должна присутствовать в ОС Windows после Win95
Раньше я загружал исполняемый файл с именем sleep
, который будет работать в командной строке после того, как вы поместите его на свой путь.
Например: выключение сна -r -f/m \ yourmachine
, хотя теперь выключение имеет параметр -t, встроенный в
Тайм-аут/t 1> nul
Это похоже на паузу в 1 секунду, вы можете довести известь до почти 100000 (99,999) секунд. Если вы подключены к Интернету, лучшим решением будет:
ping 1.1.1.1. -N 1 -w 1000> nul
Когда вы проверяете связь, вы считаете в миллисекундах, поэтому одна секунда будет равна 1000 миллисекунд. Но команда ping немного ненадежна, на автономных машинах это не работает. Проблема в том, что машина сбивается с толку, потому что находится в автономном режиме и хотела бы пропинговать website/server/host/ip
, но не может. Так что я бы рекомендовал тайм-аут. Удачи!
Timeout/t 1> nul
Похоже на паузу в 1 секунду, вы можете довести известкование почти до 100000 (99.999) секунд. Если вы подключены к Интернету, лучшим решением будет:
ping 1.1.1.1. -n 1 -w 1000> nul
Когда вы проверяете связь, вы рассчитываете в миллисекундах, поэтому одна секунда будет 1000 миллисекунд. Но команда ping немного ненадежна, она не работает так же на автономных машинах. Проблема в том, что машина сбивается с толку, потому что она оффлайн, и она хотела бы пинговать веб-сайт/сервер/хост /ip
, но не может. Поэтому я бы рекомендовал тайм-аут. Удачи!
SLEEP 5
был включен в некоторые из наборов ресурсов Windows.
TIMEOUT 5
был включен в некоторые из ресурсов Windows Наборы, но теперь это стандартная команда в Windows 7 и 8 (не уверен насчет Vista).
PING 1.1.1.1 -n 1 -w 5000> NUL
Для любой версии MS-DOS или Windows с клиентом TCP/IP PING можно использовать для задержки выполнения на несколько секунд.
NETSH badcommand
(Windows Только XP/Server 2003) или CHOICE
эта ссылка поможет вам больше.
СОН 5
был включен в некоторые из комплектов ресурсов Windows.
TIMEOUT 5
был включен в некоторые комплекты ресурсов Windows, но теперь является стандартной командой в Windows 7 и 8 (не уверен насчет Vista).
PING 1.1.1.1 -n 1 -w 5000> NUL
Для любой версии MS-DOS или Windows с TCP/ IP-клиент, PING можно использовать для задержки выполнения на несколько секунд.
Плохая команда NETSH
(только для Windows XP/Server 2003) или CHOICE
по этой ссылке поможет вам больше.
Два ответа:
Во-первых, чтобы отложить в пакетном файле, просто без всех тупых методов, которые предлагают люди:
timeout/t [/nobreak]
http://technet.microsoft.com/en-us/library/cc754891.aspx
Во-вторых, стоит упомянуть, что, хотя он может не делать именно то, что вы хотите, используя встроенную Windows ножничный инструмент, вы можете нажать на него, не используя мышь. Запустите инструмент для обрезки, выйдите из текущего фрагмента, но оставьте инструмент включенным, и нажмите Control + Print Screen, когда вы хотите, чтобы фрагмент произошел. Это не должно мешать тому, что вы пытаетесь обрезать.
Два ответа:
Во-первых , чтобы отложить пакетный файл, просто без всех тупых методов, которые предлагают люди:
timeout/t [/nobreak]
http://technet.microsoft.com/en-us/library/cc754891.aspx
Во-вторых, стоит упомянуть, что, хотя он может не делать именно то, что вы хотите, используя встроенный в Windows инструмент для обрезки, вы можете запустить его, не используя мышь. Запустите инструмент для обрезки, выйдите из текущего фрагмента, но оставьте инструмент включенным и нажмите Control + Print Screen, когда вы хотите, чтобы фрагмент произошел. Это не должно мешать тому, что вы пытаетесь обрезать.
Я пытался сделать это изнутри задачи msbuild, а выбор и тайм-аут не работали из-за перенаправления ввода-вывода.
В итоге я использовал sleep.exe из http://sourceforge.net/projects/unxutils, что приятно, потому что не требует установки и крошечный.
Пробуем с choice
:
Результаты в:
TestCmd: choice/C YN /DY/t 5EXEC: ошибка: файл либо пуст, либо не содержит допустимых вариантов. [test.proj] [Y, N]? C: test.proj (5,9): ошибка MSB3073: команда «choice/C YN/DY/t 5» завершилась с кодом 255.
Пробуем с timeout
:
Результаты в:
TestCmd: timeout/t 5EXEC: ошибка: перенаправление ввода не поддерживается, процесс завершается немедленно. [test.proj] C: test.proj (5,7): ошибка MSB3073: команда «timeout/t 5» завершилась с кодом 1.
В сторону:
Я на самом деле использую
, потому что выполняю dbghost. exe несколько раз параллельно и создает временные файлы/базы данных на основе времени текущей эпохи в секундах — что, конечно же, означает, что если вы запускаете несколько экземпляров, каждый использует одно и то же временное имя. Первоначально я пытался использовать команду MSBuild Extension Pack Thread.Sleep
, но кажется, что (обычно) она отлично выполняла задачу сна, но затем запустила
во всех потоках одновременно, и, конечно же, dbghost.exe завершится ошибкой с конфликтами. Пока что использование sleep.exe кажется более надежным.
Я пытался сделать это из задачи msbuild, а также выбор и тайм-аут оба не работали из-за перенаправления ввода-вывода.
В итоге я использовал sleep.exe из http://sourceforge.net/projects/unxutils, что приятно, потому что не требует установки и крошечный.
Пробуем с choice
:
Результаты в:
TestCmd: choice/C YN /DY/t 5EXEC: ошибка: файл либо пуст, либо не содержит допустимых вариантов. [test.proj] [Y, N]? C: test.proj (5,9): ошибка MSB3073: команда «choice/C YN/DY/t 5» завершилась с кодом 255.
Пробуем с timeout
:
Результаты в:
TestCmd: timeout/t 5EXEC: ошибка: перенаправление ввода не поддерживается, процесс завершается немедленно. [test.proj] C: test.proj (5,7): ошибка MSB3073: команда «timeout/t 5» завершилась с кодом 1.
В сторону:
Я на самом деле использую
, потому что я выполняю dbghost.exe несколько раз параллельно и он создает временные файлы/базы данных на основе времени текущей эпохи в секундах — что, конечно же, означает, что если вы запускаете несколько экземпляров, каждый из них использует одно и то же временное имя. Первоначально я пытался использовать команду MSBuild Extension Pack Thread.Sleep
, но кажется, что (обычно) она отлично выполняла задачу сна, но затем запустила
во всех потоках одновременно, и, конечно же, dbghost.exe завершится ошибкой с конфликтами. Пока что использование sleep.exe кажется более надежным.
Есть!
SLEEP
Если вы хотите его в миллисекундном режиме:
SLEEP - m
Это более полезно, чем TIMEOUT
, потому что TIMEOUT
можно прервать с помощью нажатие клавиши или CTRL + C
(для TIMEOUT/t /nobreak
). SLEEP
не может быть прерван ничем (кроме кнопки закрытия: p)
Другой — PING
. Но для PING
требуется подключение к Интернету, потому что вы будете записывать подключение к сайту.
Есть!
SLEEP
Если вы хотите его в миллисекундном режиме:
SLEEP -m
Это более полезно, чем TIMEOUT
, потому что TIMEOUT
можно прервать нажатием клавиши или CTRL + C
(для TIMEOUT/t /nobreak
). SLEEP
не может быть прерван ничем (кроме кнопки закрытия: p)
Другой — PING
. Но для PING
требуется подключение к Интернету, потому что вы будете записывать подключение к сайту.
Это последняя версия того, что я использую на практике для десятисекундной паузы, чтобы увидеть результат после завершения скрипта.
BEST> @echo doneBEST > @set DelayInSeconds = 10BEST> @rem Используйте ping для ожиданияBEST> @ping 192.0.2.0 -n 1 -w% DelayInSeconds% 000> nul
Завершенное эхо позволяет мне видеть когда сценарий завершится и пинг обеспечивает задержку. Дополнительные знаки @ означают, что я вижу текст «готово» и ожидание происходит без отвлечения меня на их команды.
Я пробовал различные решения, представленные здесь, на машине XP, поскольку идея должен был иметь командный файл, который будет работать на множестве машин, поэтому я выбрал машину XP как среду, которая, вероятно, будет наименее способной.
GOOD> ping 192.0 .2.0 -n 1 -w 3000> nul
Как и ожидалось, это дало трехсекундную задержку. Одна попытка проверки связи продолжительностью указанные 3 секунды.
BAD> ping -n 5 192.0.2.0> nul
Это заняло около 10 секунд (не 5). Мое объяснение состоит в том, что есть 5 попыток пинга, каждая с интервалом примерно в секунду, что составляет 4 секунды. И каждая попытка проверки связи, вероятно, длилась около секунды, что составило в общей сложности 9 секунд.
BAD> timeout 5BAD> sleep/w2000BAD> waitfor/T 180BAD> choice
Команды недоступны.
BAD> ping 192.0.2.0 -n 1 -w 10000> nul :: wait 10000 миллисекунд, т.е. 10 секунд
Я тоже попробовал описанное выше, прочитав, что комментарии могут быть добавлены к файлам BAT, используя два последовательных двоеточия. Однако программное обеспечение вернулось почти мгновенно. Добавление комментария в отдельной строке до того, как пинг сработал нормально.
GOOD> :: wait 10000 миллисекунд, т.е. 10 secsGOOD> ping 192.0.2.0 -n 1 -w 10000> nul
Чтобы лучше понять, что ping делает на практике, я запустил
ping 192.0.2.0 -n 5 -w 5000
Это заняло около 30 секунд, хотя 5 * 5 = 25. Мое объяснение состоит в том, что существует 5 попыток проверки связи, каждая из которых длится 5 секунд, но между попытками проверки связи есть временная задержка примерно в 1 секунду: в конце концов, нет особых причин ожидать другого результата, если вы сразу же повторите попытку, и лучше дать сети немного времени, чтобы оправиться от возникшей проблемы.
Изменить: украдено из другого сообщения, .. RFC 3330 говорит, что IP-адрес 192.0.2.0 не должен появляться в Интернете, поэтому проверьте это адрес предотвращает рассылку спама этими тестами! Я соответствующим образом изменил текст выше!
Это последняя версия того, что я использую на практике для десятисекундной паузы, чтобы увидеть результат, когда скрипт завершится.
BEST> @echo doneBEST> @set DelayInSeconds = 10BEST> @rem Используйте ping to waitBEST> @ping 192.0.2.0 -n 1 -w% DelayInSeconds% 000> nul
Готовое эхо позволяет мне видеть, когда скрипт завершает завершено, и пинг обеспечивает задержку. Дополнительные знаки @ означают, что я вижу текст «готово» и ожидание происходит без отвлечения меня на их команды.
Я пробовал различные решения, представленные здесь, на машине XP, поскольку идея должен был иметь командный файл, который будет работать на множестве машин, поэтому я выбрал машину XP как среду, которая, вероятно, будет наименее способной.
GOOD> ping 192.0 .2.0 -n 1 -w 3000> nul
Как и ожидалось, это дало трехсекундную задержку. Одна попытка проверки связи продолжительностью указанные 3 секунды.
BAD> ping -n 5 192.0.2.0> nul
Это заняло около 10 секунд (не 5). Мое объяснение состоит в том, что есть 5 попыток пинга, каждая с интервалом примерно в секунду, что составляет 4 секунды. И каждая попытка проверки связи, вероятно, длилась около секунды, что составило в общей сложности 9 секунд.
BAD> timeout 5BAD> sleep/w2000BAD> waitfor/T 180BAD> choice
Команды недоступны.
BAD> ping 192.0.2.0 -n 1 -w 10000> nul :: wait 10000 миллисекунд, т.е. 10 секунд
Я тоже попробовал описанное выше, прочитав, что комментарии могут быть добавлены к файлам BAT, используя два последовательных двоеточия. Однако программное обеспечение вернулось почти мгновенно. Добавление комментария в отдельной строке до того, как пинг сработал нормально.
GOOD> :: wait 10000 миллисекунд, т.е. 10 secsGOOD> ping 192.0.2.0 -n 1 -w 10000> nul
Чтобы лучше понять, что делает ping на практике, я запустил
ping 192.0.2.0 -n 5 -w 5000
Это заняло около 30 секунд, хотя 5 * 5 = 25. Мое объяснение состоит в том, что существует 5 попыток проверки связи, каждая из которых длится 5 секунд, но между попытками проверки связи существует задержка примерно в 1 секунду: в конце концов, нет особых причин ожидать другого результата, если вы сразу же снова выполните проверку связи, и лучше дать сети немного времени, чтобы оправиться от любой проблемы, с которой она столкнулась.
Изменить: украдено из другого сообщения, .. RFC 3330 говорит, что IP-адрес 192.0.2.0 не должен появляться в Интернете, поэтому проверка связи с этим адресом предотвращает рассылку спама этими тестами! Я изменил текст выше соответственно!
Еще два способа, которые должны работать со всем, начиная с XP и выше:
с w32tm
:
w32tm/stripchart/computer: localhost/period: 5/dataonly/samples: 2 1> nul
с typeperf
:
typeperf " System Processor Queue Length" -si 5 -sc 1> nul
с mshta
(не требует настройки сети):
start ""/w/b/min mshta "javascript: setTimeout (function () {close ();}, 5000);"
Еще два способа, которые должны работать со всем, начиная с XP и выше:
с w32tm
:
w32tm/stripchart/computer: localhost/period: 5/dataonly/samples: 2 1> nul
с typeperf
:
typeperf " System Processor Queue Length" -si 5 -sc 1> nul
с mshta
(не требует настройки сети):
start ""/w/b/min mshta "javascript: setTimeout (function () {close ();}, 5000); "
Я сделал это. Он работает и показывает оставшееся время в секундах. Если вы хотите использовать его, добавьте в пакетный файл:
call wait 10
Он работал, когда я его тестировал .
Листинг wait.bat
(он должен находиться в рабочем каталоге или в windir/system32/
):
@echo offset SW = 00set SW2 = 00set/a Sec =% 1-1set il = 00 @ echo Wait% 1 secondfor/f "tokens = 1,2,3,4 delims = :, "%% A in ("% TIME% ") установить/a HH = %% A, MM = 1 %% B-100, SS = 1 %% C-100, CC = 1 %% D -100, TBASE = ((HH * 60 + MM) * 60 + SS) * 100 + CC, SW = CC set/a TFIN =% TBASE% +% 100: ESPERARfor/f "токенов = 1,2,3, 4 разделителя = :, "%% A в ("% TIME% ") установить/a HH = %% A, MM = 1 %% B-100, SS = 1 %% C-100, CC = 1 %% D-100, TACTUAL = ((HH * 60 + MM) * 60 + SS) * 100 + CC, SW2 = CCif% SW2% neq% SW% goto notypeif% il% == 0 (echo Left% Sec% second & set/a Sec = sec-1 & set/a il = il + 1) goto no0: notypeset/a il = 0: no0if% TACTUAL% lss% TBASE% set/a TACTUAL =% TBASE% +% TACTUAL% if% TACTUAL% lss% TFIN% goto ESPERAR
Я сделал это. Он работает и показывает оставшееся время в секундах. Если вы хотите использовать его, добавьте в пакетный файл:
call wait 10
Он работал, когда я его тестировал .
Листинг ожидания. bat
(он должен находиться в рабочем каталоге или windir/system32/
):
@echo offset SW = 00set SW2 = 00set/a Sec =% 1-1set il = 00 @ echo Wait% 1 secondfor/f "tokens = 1,2,3,4 delims = :," %% A in ("% TIME%") do set/ a HH = %% A, MM = 1 %% B-100, SS = 1 %% C-100, CC = 1 %% D-100, TBASE = ((HH * 60 + MM) * 60 + SS) * 100 + CC, SW = CC set/a TFIN =% TBASE% +% 100: ESPERARfor/f "tokens = 1,2,3,4 delims = :," %% A in ("% TIME%") установить /a HH = %% A, MM = 1 %% B-100, SS = 1 %% C-100, CC = 1 %% D-100, TACTUAL = ((HH * 60 + MM) * 60 + SS) * 100 + CC, SW2 = CCif% SW2% neq% SW% goto notypeif% il% == 0 (echo Left% Sec% second & set/a Sec = sec-1 & set/a il = il + 1) goto no0: notypeset/a il = 0: no0if% TACTUAL% lss% TBASE% set/a TACTUAL =% TBASE% +% TACTUAL% if% TACTUAL% lss% TFIN% goto ESPERAR
Улучшение кода, предложенного пользователем Aacini, имеет разрешение сотых долей секунды и не дает сбоя, когда время достигает 23 : 59: 59,99:
for/f "tokens = 1,2,3,4 delims = :," %% A in ("% TIME%") do set/a HH = %% A, MM = 1 %% B-100, SS = 1 %% C-100, CC = 1 %% D-100, TBASE = ((HH * 60 + MM) * 60 + SS) * 100 + CC :: Пример задержки 1 seg.set/a TFIN =% TBASE% + 100: ESPERARfor/f "tokens = 1,2,3,4 delims = :," %% A in ("% TIME % ") установить/a HH = %% A, MM = 1 %% B-100, SS = 1 %% C-100, CC = 1 %% D-100, TACTUAL = ((HH * 60 + MM) * 60 + SS) * 100 + CCif% TACTUAL% lss% TBASE% set/a TACTUAL =% TBASE% +% TACTUAL% if% TACTUAL% lss% TFIN% goto ESPERAR
Усовершенствование кода, предложенного пользователем Aacini, имеет разрешение сотых долей секунды и не дает сбоев, когда время достигает 23: 59: 59,99:
for/f "tokens = 1,2,3,4 delims = :," %% A in ("% TIME%") установить/a HH = %% A , MM = 1 %% B-100, SS = 1 %% C-100, CC = 1 %% D-100, TBASE = ((HH * 60 + MM) * 60 + SS) * 100 + CC :: Пример delay 1 seg.set/a TFIN =% TBASE% + 100: ESPERARfor/f "tokens = 1,2,3,4 delims = :," %% A in ("% TIME%") do set/a HH = %% A, MM = 1 %% B-100, SS = 1 %% C-100, CC = 1 %% D-100, TACTUAL = ((ЧЧ * 60 + MM) * 60 + SS) * 10 0 + CCif% TACTUAL% lss% TBASE% set/a TACTUAL =% TBASE% +% TACTUAL% if% TACTUAL% lss% TFIN% goto ESPERAR
Вы можете использовать VBScript, например, файл myscript.vbs
:
set wsobject = wscript.createobject ("wscript.shell") do while 1 = 1 wsobject.run "SnippingTool.exe", 0, TRUE wscript.sleep 3000loop
Пакетный файл :
cscript myscript.vbs% 1
Вы можете использовать VBScript, например, файл myscript.vbs
:
set wsobject = wscript.createobject ("wscript .shell ") do while 1 = 1 wsobject.run" SnippingTool.exe ", 0, TRUE wscript.sleep 3000loop
Пакетный файл:
cscript myscript. vbs% 1
Я использую следующий метод, полностью основанный на возможностях Windows XP для выполнения задержка в пакетном файле:
Файл DELAY.BAT
@ECHO OFFREM DELAY secondsREM GET ENDING SECONDFOR/F "TOKENS = 1-3 DELIMS знак равно %% A IN ("% TIME%") DO SET/AH = %% A, M = 1 %% B %% 100, S = 1 %% C %% 100, ENDING = (H * 60 + M) * 60 + S +% 1ДОЖДИТЕ ТАКУЮ СЕКУНДУ: WAITFOR/F "TOKENS = 1-3 DELIMS = :." %% A IN ("% TIME%") DO SET/AH = %% A, M = 1 %% B %% 100, S = 1 %% C %% 100, CURRENT = (H * 60 + M) * 60 + SIF% CURRENT% LSS% ENDING% GOTO WAIT
Вы также можете вставить день в расчет, чтобы этот метод также работал, когда интервал задержки превышает полночь.
Я использую следующий метод, полностью основанный на возможностях Windows XP для задержки в пакетном файле:
Файл DELAY.BAT
@ECHO OFFREM DELAY secondsREM GET ENDING SECONDFOR/F "TOKENS = 1-3 DELIMS = :." %% A IN ("% TIME%") DO SET/AH = %% A, M = 1 %% B %% 100, S = 1 %% C %% 100, ENDING = (H * 60 + M) * 60 + S +% 1ДОЖДИТЕ ТАКУЮ СЕКУНДУ: WAITFOR/F "TOKENS = 1-3 DELIMS = :." %% A IN ("% TIME%") DO SET/AH = %% A, M = 1 %% B %% 100, S = 1 %% C %% 100, CURRENT = (H * 60 + M) * 60 + SIF% CURRENT% LSS% ENDING% GOTO WAIT
Вы также можете вставить день в расчет, чтобы этот метод также работал, когда интервал задержки превышает полночь.
Самый простой способ, которым я это сделал:
Загрузите Sleep.exe по адресу http://www.sleepcmd.com/. Файл .exe должен находиться в той же папке, что и написанная вами программа!
Самый простой способ. сделал это вот так:
Загрузите Sleep.exe с http://www.sleepcmd.com/. Файл .exe должен находиться в той же папке, что и написанная вами программа!
Это можно сделать с помощью две простые строки в пакетном файле: напишите временный файл .vbs
в папке % temp%
и вызовите его:
echo WScript.Sleep (5000)> "% temp% sleep.vbs" cscript "% temp% sleep.vbs"
Это можно сделать двумя простыми строками в пакетном файле: напишите временный файл .vbs
в % temp%
и назовите ее:
echo WScript.Sleep (5000)> "% temp% sleep.vbs" cscript "% temp% sleep.vbs "
Если у вас есть подходящая версия Windows и Windows Server 2003 Resource Kit Tools, он включает команду сна для пакетных программ. Подробнее на: http://malektips.com/xp_dos_0002. html
Если у вас есть соответствующая версия Windows и Windows Server 2003 Resource Kit Tools, она включает команду сна для пакетных программ. Подробнее на: http://malektips.com/xp_dos_0002.html
PING - n 60 127.0.0.1> nul
в случае, если ваш сетевой адаптер недоступен.
PING -n 60 127.0.0.1> nul
в случае, если ваш сетевой адаптер недоступен.
В Windows xp sp3 вы можете использовать команду сна
В Windows xp sp3 вы можете использовать команду сна
Создайте файл cmd с именем sleep.cmd :
REM Использование: SLEEP Time_in_MiliSECONDS @ ECHO offping 1.0.0.0 -n 1 -w% 1> nul
Копировать сон .cmd в c: windows system32
Использование:
sleep 500
Sleeps на 0,5 секунды. Аргументы в мс. После копирования в System32 может использоваться везде.
РЕДАКТИРОВАТЬ: вы также должны быть вдали от того, что, если машина не подключена к сети (скажем, портативная машина, которую вы используете в метро), трюк с пингом больше не работает.
Создайте файл cmd с именем sleep.cmd:
REM Использование: SLEEP Time_in_MiliSECONDS @ ECHO offping 1.0.0.0 -n 1 -w% 1> nul
Скопируйте sleep.cmd в c: windows system32
Использование:
sleep 500
Спит на 0,5 секунды. Аргументы в мс. После копирования в System32 может использоваться везде.
РЕДАКТИРОВАТЬ: вы также должны быть вдали от того, что, если машина не подключена к сети (скажем, портативная машина, которую вы используете в метро), трюк с пингом больше не работает.
Что ж, это работает, если у вас есть выбор или пинг.
@echo offecho.if "% 1" == "" goto askqif "% 1" == "/?" goto helpif/i "% 1" == "/h" goto helpif% 1 GTR 0 if% 1 LEQ 9999 if/i "% 2" == "/q" set ans1 =% 1 & goto quietif% 1 GTR 0 if % 1 LEQ 9999 set ans1 =% 1 & goto breakoutif% 1 LEQ 0 echo% 1 не является допустимым числом и goto help, если не "% 1" == "" echo. & Echo "% 1" - неправильный параметр & goto helpgoto end : helpecho SLEEP запускается в интерактивном режиме (сам по себе) или с параметрами (sleep #/q) echo, где # находится в секундах, диапазон от 1 до 9999echo Используйте дополнительный параметр/q для подавления стандартного вывода echo или введите/h или/? для этого файл справки echo.goto end: askqset/p ans1 = Сколько секунд спать? ^ эхо. if "% ans1%" == "" goto askqif% ans1% GTR 0 if% ans1% LEQ 9999 goto breakoutgoto askq: quietchoice/n/t% ans1%/dn> nulif errorlevel 1 ping 1.1.1.1 -n 1 -w % ans1% 000> nulgoto end: breakoutchoice/n/t% ans1%/dn> nulif errorlevel 1 ping 1.1.1.1 -n 1 -w% ans1% 000> nulecho Slept% ans1% second ^ (s ^) echo .: конец
просто назовите его sleep.cmd или sleep.bat и запустите
Ну это работает, если у вас есть выбор или пинг.
@echo offecho.if "% 1" == "" goto askqif "% 1" == "/?" goto helpif/i "% 1" == "/h" goto helpif% 1 GTR 0 if% 1 LEQ 9999 if/i "% 2" == "/q" set ans1 =% 1 & goto quietif% 1 GTR 0 if % 1 LEQ 9999 set ans1 =% 1 & goto breakoutif% 1 LEQ 0 echo% 1 не является допустимым числом и goto help, если не "% 1" == "" echo. & Echo "% 1" - неправильный параметр & goto helpgoto end : helpecho SLEEP запускается в интерактивном режиме (сам по себе) или с параметрами (sleep #/q) echo, где # находится в секундах, диапазон от 1 до 9999echo Используйте дополнительный параметр/q для подавления стандартного вывода echo или введите/h или/? для этого файл справки echo.goto end: askqset/p ans1 = Сколько секунд спать? ^ echo.if "% ans1%" == "" goto askqif% ans1% GTR 0 if% ans1% LEQ 9999 goto breakoutgoto askq: quietchoice/n/t% ans1%/dn> nulif errorlevel 1 ping 1.1.1.1 -n 1 -w% ans1% 000> nulgoto end: breakoutchoice/n/t% ans1%/dn> nulif errorlevel 1 ping 1.1.1.1 -n 1 -w% ans1% 000> nulecho Slept% ans1% second ^ (s ^) echo.:end
просто назовите его sleep.cmd или sleep.bat и запустите
ping ждет около 5 секунд перед тайм-аутом, а не 1 секунду, как было указано выше. То есть, если вы не скажите , чтобы он ждал только 1 секунду перед истечением времени.
ping 1.0.0.1 -n 1 -w 1000
будет пинговать один раз, подождите только 1 секунду (1000 мс) для ответа, затем время ожидания.
Итак, приблизительно 20-секундная задержка будет:
ping 1.0.0.1 -n 20 -w 1000
ping ожидает примерно 5 секунд перед ти ming out, а не 1 секунду, как было указано выше. То есть, если вы не укажете , чтобы он ждал только 1 секунду перед истечением времени.
ping 1.0.0.1 -n 1 -w 1000
будет пинговать один раз, ждать ответа только 1 секунду (1000 мс), затем время ожидания.
Итак, примерно 20-секундная задержка будет:
ping 1.0.0.1 -n 20 -w 1000
Я написал программу powerbasic wait.exe , в которой вы передаете ей миллисекундный параметр в своем командном файле
wait 3000system ('c:/windows/system32/SnippingTool. exe ')
код для EXE:
ФУНКЦИЯ PBMAIN () c $ = Command $ s! = Val (c $) * 1000 снов! КОНЕЦ ФУНКЦИИ
Я написал программу powerbasic wait.exe , в которой вы передаете миллисекунду параметр к нему в вашем пакетном файле
wait 3000system ('c:/windows/system32/SnippingTool.exe')
код для EXE:
FUNCTION PBMAIN () c $ = Command $ s! = Val (c $) * 1000 снов! КОНЕЦ ФУНКЦИИ
В более новых версиях ОС Windows вы можете использовать команду
sleep/w2000
в сценарии DOS ( .cmd
или .bat
), чтобы подождать 2 секунды (2000 мс — подставьте нужное время в мс). Будьте осторожны при включении аргумента /w
— без него весь компьютер переводится в спящий режим! Вы можете использовать -m
вместо /m
, если хотите, и, при желании, двоеточие (:) между w и числом.
В более новых версиях ОС Windows вы можете использовать команду
sleep/ w2000
в сценарии DOS ( .cmd
или .bat
) для ожидания 2 с (2000 мс — подставьте нужное время в мс). Будьте осторожны при включении аргумента /w
— без него весь компьютер переводится в спящий режим! Вы можете использовать -m
вместо /m
, если хотите, и, при желании, двоеточие (:) между w и числом.
Это должно сработать: выбор/T 5/N/DY
Замените 5 на время в секундах, которое вы хотите подождать …
Это должно сработать: выбор/T 5/N/DY
Замените 5 временем в секундах, которое вы хотите подождать …