10秒ごとにバッチファイルを実行する


24

バッチファイルがあります。

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

Windows XPで10秒ごとにこれら2つのコマンドを実行するにはどうすればよいですか?


3
Windowsのスケジュールされたタスクを使用して、1分ごとにタスクを取得できます。

Windowsバッチで可能です。以下のソリューションをご覧ください。唯一の問題はcpuの使用
...-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
過去10年間に作成されたすべてのバージョンのWindowsに対する正しい答え(質問で指定されたWindows XPを含む)。ありがとう:
16

それは実際に-1-99 999秒(~~ 1day3,7h | windows7)- /t任意のキーを押すためにORで指定された数値/NOBREAK
-paramを

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のようなもの、またはそれをシミュレートするためのその他のトリック(ブルーノが言及しているpingトリック)が必要になります。そうするためのメモはここにあります


6
スリープはデフォルトでは含まれていません。これを入手するには、リソースキットまたは何かが必要ですか?
marcc

正確に何が必要ですか?

そうじゃない?私はそれが私が頼りにすることができる何かであったと誓うことができた、しかし私はchoiceそれが標準によって含まれないかもしれないように思う。もっと詳しく見ていきます。

1
スリープコマンドを「偽造」するためにWindowsに他のものをインストールする必要はありません。例については、私の答えをご覧ください。

1

より正確なソリューションは、存在しないホストを1回pingし、タイムアウトを設定します

ping 1.0.0.0 -n 1 -w 10000> nul

しかし、それは寄生虫のトラフィックを生成します


1

forand 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

さあ、バッチ内の終わりのないループに入れてください。


1
または、必要に応じて、リソースキットをダウンロードするか、スリープ10の単純なプログラムを作成します。ただし、私の方法では、ソフトウェアを再度ダウンロードしなくても別のマシンに移動できます。

choiceXP以降に付属しているとは思わなかった、または少なくとも最近のインストールでは見たことがない。

1
このラップトップでバニラビスタホームプレミアムを実行していますが、正常に動作します。

Windows XPには「選択」はありません!!!
-kokbira

0

Cygwinをインストールします。これによりsleepcron(特に)使用できるようになります。


2
彼が求めていることをやり過ぎ!

-1

以下では、それはくて美しい方法であり、Windowsバッチファイルです。何もしないために多くのCPU時間を消費しますが、それはあなたが望むことをし、とても素晴らしいです。

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

別の方法は、いくつかのループシーケンスを実行することです。たとえば、((1,1,65535)の/ l %% iで何も設定しない= 0)を何度か繰り返し、テストを繰り返す必要がある「キャリブレーション」 10秒で結果、ハハハ。しかし、それは最もuい方法です。
kokbira

関数として使用するWindowsバッチを作成することもできます(1つは時間を分割し、1つは待機を行います...)が、より複雑になります
...-kokbira

23:59:51から23:59:59まで使用している場合、バグが発生すると思います-その場合、バッチは永遠に待機します...「if's」が問題を解決します...
kokbira

固定時間(時間+ 10秒ではない)でテストする場合は、「if%time%geq 10:30 do goto end」を実行するだけです。ソリューションが複雑になったのは、合計
...-kokbira

それは実際に恐ろしいです。まず、忙しい待っています。CPUサイクルを不必要に浪費することは、決して良いアイデアではありません(組み込みハードウェア上での場合を除く)。また、これは真夜中頃には正しく動作しないようです。
ジョーイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.