Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Задержка в бат файле


Автор: RinOSpro 22.10.2007, 10:27
Здравствуйте подскажите как можно реализовать задержку в бат файле?

Автор: Akina 22.10.2007, 10:38
переписАть его на VBS

Автор: Rodman 22.10.2007, 10:39
http://otvety.google.ru/otvety/thread?tid=4f1413783fca9f16&fid=4f1413783fca9f1600043a7ab3640ca3

или PAUSE

Автор: RinOSpro 22.10.2007, 13:15
В общем решение такое но тут есть недостаток после прехода goto sleep: она не возращается к месту вызова. а если принудительно заставить вернуться  goto back: то получается зацикливание. как здесь можно сделать возврат помогите.

Код

echo off

echo 1

set timesleep=3
goto sleep:

:back

echo 2

:sleep
if %timesleep%==1 (
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO echo %%a
)

if %timesleep%==2 (
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%b in (0,1,2,3,4,5,6,7,8,9) DO echo %%a %%b
)
)

if %timesleep%==3 (
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%b in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%c in (0,1,2,3,4,5,6,7,8,9) DO echo %%a %%b %%c
)
)
)

goto back:

Автор: Akina 22.10.2007, 13:35
Цитата(RinOSpro @  22.10.2007,  14:15 Найти цитируемый пост)
В общем решение такое 

ЭТО - РЕШЕНИЕ???

Автор: dumb 22.10.2007, 13:47
Цитата(Akina @  22.10.2007,  14:35 Найти цитируемый пост)
ЭТО - РЕШЕНИЕ???
+1

вот решение:
Код

@echo off
:: пример вызова процедуры задержки
echo %TIME%
:: спать пять секунд
call :sleep 5
echo %TIME%
pause
goto :EOF

:sleep
setlocal
set /a delay=%1+1
ping 127.0.0.1 -n %delay% >nul 2>&1
endlocal
goto :EOF

Автор: RinOSpro 22.10.2007, 14:13
ДА ЭТО РЕШЕНИЕ!!! Вот доработанный вариан спасибо за наводку с калом )). И мой вариант поточне чем ping в 1 секунду. Мне нужны были милисекунды, и я их получил. Если в этом примере вы думайте чтото можно усовершенствовать, советуйте не стесняйтесь.

Код

echo off

echo %TIME%

call :sleep 4

echo %TIME%

pause

:sleep
setlocal
if %1==1 (
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO @echo %%a
)

if %1==2 (
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%b in (0,1,2,3,4,5,6,7,8,9) DO @echo %%a %%b
)
)

if %1==3 (
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%b in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%c in (0,1,2,3,4,5,6,7,8,9) DO echo %%a %%b %%c
)
)
)

if %1==4 (
FOR %%a in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%b in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%c in (0,1,2,3,4,5,6,7,8,9) DO (
FOR %%d in (0,1,2,3,4,5,6,7,8,9) DO echo %%a %%b %%c %%d
)
)
)
)
endlocal

Автор: Akina 22.10.2007, 14:23
Ну попробовал я запустить этот шедевр...:

Цитата

E:\>1

E:\>echo off
15:20:53,27
0 0 0 0
0 0 0 1
0 0 0 2
..... пропущено, есссно .....
9 9 9 8
9 9 9 9
15:20:55,35
Для продолжения нажмите любую клавишу . . .
Непредвиденное появление: (.

E:\>

Я уж не говорю о том, что вывод 10 тыс. строк с цифрами - это песня...

Автор: dumb 22.10.2007, 14:24
Цитата(RinOSpro @  22.10.2007,  15:13 Найти цитируемый пост)
ДА ЭТО РЕШЕНИЕ!!!
это бред, который зависит от быстродействия компа. если нужны доли секунды, то нужно делать .exe.

Автор: RinOSpro 22.10.2007, 14:33
dumb,  Akina короче ваш пример и с мс работает call :sleep 0,3

Автор: dumb 22.10.2007, 14:51
Цитата(RinOSpro @  22.10.2007,  15:33 Найти цитируемый пост)
короче ваш пример и с мс
smile
пинг делает задержку между посылками пакетов четко в 1с. количество секунд задается через указание количества отсылаемых пакетов, которое может быть только целым.
при вызове "call :sleep 0,3" пинг просто выругивается на недопустимость параметра, но так как стоит подавление вывода, ты этого не видишь.

Автор: RinOSpro 22.10.2007, 14:57
но time точно такой какой мне нужно 
15:55:00,55
15:55:00,59 

Автор: Akina 22.10.2007, 17:50
dumb, да чего мы... устраивает - и пусть использует. Вот когда оно (прикинь - вдруг!) начнет работать неправильно - сделаем вторую итерацию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)