Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Программа должна уснуть на заданное количество секунд. (http://forum.oszone.net/showthread.php?t=309150)

anoxina 13-12-2015 10:32 2584295

Программа должна уснуть на заданное количество секунд.
 
Программа засыпает на заданное количество секунд:
Код:

@echo off
set /a x=%1
set tim=%time%

for /f "tokens=1,2,3 delims=:" %%a in ("%tim%") do set /a st=(%%a*60+%%b)*60+%%c 2> nul


:cycle

set tim=%time%
for /f "tokens=1,2,3 delims=:" %%a in ("%tim%") do set /a ct=(%%a*60+%%b)*60+%%c 2> nul

set /a dt=%ct%-%st% 2> nul

if /i %dt% leq %x% goto :cycle
goto :eof

Проблема кода в том что при переходе времени до полуночи? т. е. 00:00:00 программа переходит в вечный цикл , как это исправить ?
Еще не должно выводить ошибку про восьмеричную систему, т.е. когда пишешь 08 считало как 8 секунд
В данной задаче нельзя использовать команду ping и timeout

Iska 13-12-2015 11:20 2584310

anoxina, таким циклом Вы даёте 100% нагрузку на одно из реальных/виртуальных ядер процессора. Не делайте так. См. Пауза в пакетном файле:
Код:

>nul ping.exe -n %~1 127.0.0.1

anoxina 13-12-2015 14:34 2584364

Нельзя использовать команду ping.

Iska 13-12-2015 15:47 2584384

Цитата:

Цитата anoxina
В данной задаче нельзя использовать команду ping. »

Просмотрел :). Поясните, почему нельзя?

В новых ОС есть ещё «timeout»:
Код:

>nul timeout.exe /t %~1 /nobreak

anoxina 13-12-2015 19:08 2584452

Такая цель задачи, timeout тоже использовать нельзя

Foreigner 13-12-2015 20:28 2584482

Код:

@echo off
setlocal

set "timeout=10"
set "t1=%time:~0,-3%"

echo %t1%

:1

set "t2=%time:~0,-3%"

if %t1% equ %t2% (goto:1) else (

        set /a timeout-=1
        set "t1=%t2%"

)

if %timeout% neq 0 goto:1
echo %time:~0,-3%


anoxina 13-12-2015 22:08 2584523

Foreigner, Когда пишешь 08 и 09 программа не работает, а уходит в вечный цикл, как это исправить?

anoxina 13-12-2015 22:55 2584536

Проблему исправила

Цитата:

Цитата Foreigner
:1
set "t2=%time:~0,-3%"
if %t1% equ %t2% (goto:1) else (
set /a timeout-=1
set "t1=%t2%" »

Объясните как работает этот фрагмент

Foreigner 13-12-2015 23:00 2584538

anoxina,
Код:

@echo off
setlocal

set "timeout=09"
2>nul set /a %timeout% || echo Enter valid integer && goto:eof
...


anoxina 14-12-2015 05:44 2584592

Цитата:

Цитата Foreigner
:1
set "t2=%time:~0,-3%"
if %t1% equ %t2% (goto:1) else (
set /a timeout-=1
set "t1=%t2%" »

Объясните как работает этот фрагмент

anoxina 14-12-2015 08:09 2584604

А если ввожу 091 081 уже не работает , как это исправить?

Foreigner 14-12-2015 11:51 2584664

Не понятен смысл. Зачем это надо? Уберите лидирующий ноль(нули) и все будет нормально:
Код:

@echo off
setlocal

set "timeout=009"
set "t1=%time:~0,-3%"

:0
if %timeout:~0,1% equ 0 set timeout=%timeout:~1% && goto:0

echo %t1%
...



Время: 17:26.

Время: 17:26.
© OSzone.net 2001-