Робіть щось кожні 10 секунд


24

У мене є пакетний файл:

arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns

Як я можу робити ці дві команди в Windows XP кожні 10 секунд?


3
Ви можете скористатись запланованими завданнями Windows, щоб зменшити їх раз на хвилину.

це можливо з пакетом Windows: дивіться моє рішення нижче. Єдина проблема - використання процесора ...
kokbira

Відповіді:


36

це робить 10 сек. затримка:

timeout /t 10

тому спробуйте це:

 :loop
 arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
 ipconfig /flushdns
 timeout /t 10
 goto loop

1
Правильна відповідь на будь-яку версію Windows, зроблену за останнє десятиліття (включаючи Windows XP, вказану у запитанні). Спасибі :-)
woot

Він насправді чекає -1 - 99 999 секунд (~~ 1day3,7h | windows7) - число, вказане /tАБО для натискання будь-якої клавіші - яке можна вимкнути, надіславши /NOBREAKпарам :)
jave.web

19

Спробуйте це:

:loop
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
ping localhost -n 11 > nul
goto loop

Команда ping буде виконуватись протягом 10 секунд, і весь вихід буде перенаправлений на пристрій NUL, це означає, що ви не побачите жодного виводу з команди ping. Це справді працює так, як би команда "сну".


11
:top
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
sleep 10
goto top

Редагувати: Як зазначено в коментарях, SLEEPвони не будуть доступні в звичайній інсталяції. Вам знадобиться щось на зразок набору ресурсів Windows 2003 або якийсь інший трюк, щоб імітувати його (згадує трюк пінг, який Бруно згадує), і примітки для цього можна знайти тут .


6
сон за замовчуванням не включений. Вам потрібен комплект ресурсів чи щось для цього?
marcc

Що саме мені потрібно?

Це не так? Я міг би присягнути, що на це я міг розраховувати, але, мабуть, choiceвін може не включатись у стандарт. Я детальніше розберуся в цьому.

1
Не потрібно встановлювати нічого іншого на Windows, щоб "підробляти" команду сну. Погляньте на приклад мою відповідь.

1

Більш точне рішення пінг одного разу неіснуючого хоста та встановлення тайм-ауту

ping 1.0.0.0 -n 1 -w 10000> нуль

Але це генерує трафік паразитів


1

Ви можете використовувати команду forта ping:

@echo off
for /l %%a in (0,0,0) do (
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
ping -n 11 localhost >nul
)

Ви можете використовувати, ping -n [secs+1] localhost >nulщоб зачекати певну кількість часу в секундах.


1
Чому це краще, ніж саме та сама команда ping, запропонована в іншій відповіді?
RalfFriedl

Справедливості, це перша відповідь, яка показує, як зробити нескінченний цикл без використання goto.
Скотт

0

Чит:

Використовуйте цю команду, щоб призупинити пакет на 10 секунд

вибір / n / t: c, <10> / c: cc

Тепер помістіть його в нескінченну петлю в партії і voilà!


1
Або, якщо ви хочете, скачайте набір ресурсів або напишіть просту програму для сну 10. Однак мій метод означатиме, що ви можете перенести його на іншу машину без необхідності завантажувати більше програмного забезпечення.

Я не думав, що choiceприйшов із XP та пізнішими версіями, або, принаймні, я не бачив його в останніх встановленнях.

1
Я використовую ванільний Vista Home Premium на цьому ноутбуці, і він працює чудово.

немає "вибору" для windows xp !!!
kokbira

0

Встановіть Cygwin, який зробить sleepі cronдоступним для вас (серед іншого).


2
Надмірність за те, що він просить!

-1

внизу, це одночасно некрасиво і прекрасно, пакетний файл Windows - він вимагає багато процесорного часу, щоб нічого не робити, але це робить те, що ви хочете, і це так приємно.

SETLOCAL EnableDelayedExpansion

::in seconds
set time2stop=10

:loop1
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns

for /f "tokens=1,2* delims=:" %%i in ("!time!") do (
  set hour1=%%i
  set min1=%%j
  set sec1=%%k
)

for /f "tokens=1* delims=," %%i in ("!sec1!") do (
  set isec1=%%i
)

:loop2

for /f "tokens=1,2* delims=:" %%i in ("!time!") do (
  set hour2=%%i
  set min2=%%j
  set sec2=%%k
)

for /f "tokens=1* delims=," %%i in ("!sec2!") do (
  set isec2=%%i
)

set /a delta=3600*(!hour2!-!hour1!)+60*(!min2!-!min1!)+(!isec2!-!isec1!)
if !delta! geq !time2stop! goto end2

goto loop2

:end2

@echo on

goto loop1

інший спосіб - зробити певну послідовність циклу, наприклад повторити (для / l %% i in (1,1655535) не встановити нічого = 0) кілька разів і "калібрувати" "скільки разів", вам доведеться повторити тестування результат за 10 секунд, ха-ха. але це найгідніший спосіб.
kokbira

Ви також можете створити декілька пакетів Windows, які будуть використовуватись як функції (один для розділення часу, один для очікування ...), але це буде складніше ...
kokbira

Я думаю, що це спричинить помилку, якщо ви використовуєте його з 23:59:51 до 23:59:59 - у такому випадку партія буде чекати вічно ... деякі "якщо" вирішили б проблему ...
kokbira

якщо ви хочете протестувати фіксований час (не час + 10сек), ви можете просто зробити "якщо% time% geq 10:30 закінчується". рішення стало складним, оскільки сума ...
kokbira

Це насправді жахливо. Перш за все, зайнятий чеканням. марно витрачати цикли процесора ніколи не є хорошою ідеєю (якщо тільки на вбудованому обладнання). Це також, здається, не працює правильно близько півночі.
Джої
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.