У меня есть командный файл:
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
Как я могу выполнять эти две команды в Windows XP каждые 10 секунд?
это составляет 10 сек. задержка:
timeout /t 10
так что попробуйте это:
:loop
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
timeout /t 10
goto loop
Попробуй это:
: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. Это действительно работает как команда "сна".
:top
arp -s 192.168.1.254 xx-xx-xx-xx-xx-xx
ipconfig /flushdns
sleep 10
goto top
Изменить: как уже упоминалось в комментариях, SLEEP
не будет доступен при обычной установке. Вам понадобится что-то вроде Windows 2003 Resource Kit или какой-то другой трюк для его симуляции (трюк для пинга, упоминает Бруно), и заметки для этого можно найти здесь.
Вы можете использовать команды 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
чтобы ждать определенное время в секундах.
Более точное решение пингует несуществующий хост один раз и устанавливает таймаут
ping 1.0.0.0 -n 1 -w 10000> nul
Но это генерирует паразитный трафик
Чит:
Используйте эту команду, чтобы приостановить пакет на 10 секунд
выбор / н / т: с, <10> / с: куб.
Теперь поместите его в бесконечный цикл в пакете и вуаля!
Установите Cygwin, который сделает sleep
и cron
доступными для вас (среди прочего).
ниже, это как уродливый и красивый способ, пакетный файл 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