19

У меня есть командный файл:

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

Как я могу выполнять эти две команды в Windows XP каждые 10 секунд?

8 ответов8

26

это составляет 10 сек. задержка:

timeout /t 10

так что попробуйте это:

 :loop
 arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
 ipconfig /flushdns
 timeout /t 10
 goto loop
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 Resource Kit или какой-то другой трюк для его симуляции (трюк для пинга, упоминает Бруно), и заметки для этого можно найти здесь.

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 1.0.0.0 -n 1 -w 10000> nul

Но это генерирует паразитный трафик

0

Чит:

Используйте эту команду, чтобы приостановить пакет на 10 секунд

выбор / н / т: с, <10> / с: куб.

Теперь поместите его в бесконечный цикл в пакете и вуаля!

0

Установите Cygwin, который сделает sleep и cron доступными для вас (среди прочего).

-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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .