Làm một cái gì đó cứ sau 10 giây


24

Tôi có một tệp bó:

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

Làm cách nào tôi có thể thực hiện hai lệnh này trên Windows XP, cứ sau 10 giây?


3
Bạn có thể sử dụng các tác vụ theo lịch trình của Windows để giảm xuống một lần một phút.

có thể với lô Windows: xem giải pháp của tôi dưới đây. vấn đề duy nhất là việc sử dụng cpu ...
kokbira

Câu trả lời:


36

Điều này làm cho 10 giây. sự chậm trễ:

timeout /t 10

vì vậy hãy thử điều này:

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

1
Câu trả lời đúng cho bất kỳ phiên bản Windows nào được thực hiện trong thập kỷ qua (bao gồm cả Windows XP được chỉ định trong câu hỏi). Cảm ơn :-)
woot

Nó thực sự đợi -1 - 99 999 giây (~ ~ 1day3,7h | windows7) - số được chỉ định trong /tHOẶC để nhấn bất kỳ phím nào - có thể tắt bằng cách gửi /NOBREAKparam :)
jave.web

19

Hãy thử cái này:

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

Lệnh ping sẽ thực thi trong 10 giây và tất cả đầu ra sẽ được chuyển hướng đến thiết bị NUL, nghĩa là bạn sẽ không thấy đầu ra từ lệnh ping. Nó thực sự hoạt động như một lệnh "ngủ".


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

Chỉnh sửa: Như đã đề cập trong các nhận xét, SLEEPsẽ không có sẵn trong một cài đặt bình thường. Bạn sẽ cần một cái gì đó như Bộ tài nguyên Windows 2003 hoặc một số mẹo khác để mô phỏng nó (mẹo ping mà Bruno đề cập) và các ghi chú để làm như vậy có thể được tìm thấy ở đây .


6
giấc ngủ không được bao gồm theo mặc định. Bạn cần bộ tài nguyên hoặc một cái gì đó để có được điều này?
marcc

Chính xác thì tôi cần gì?

Nó không phải là? Tôi có thể đã thề rằng đó là thứ tôi có thể tin tưởng, nhưng tôi đoán choicecó thể nó không được bao gồm trong tiêu chuẩn. Tôi sẽ xem xét nó nhiều hơn.

1
Không cần phải cài đặt bất cứ thứ gì khác trên windows để "giả" lệnh ngủ. Hãy xem câu trả lời của tôi cho một ví dụ.

1

Giải pháp chính xác hơn ping máy chủ không tồn tại một lần và đặt thời gian chờ

ping 1.0.0.0 -n 1 -w 10000> không

Nhưng nó tạo ra lưu lượng ký sinh trùng


1

Bạn có thể sử dụng lệnh forping:

@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
)

Bạn có thể sử dụng ping -n [secs+1] localhost >nulđể chờ một khoảng thời gian nhất định tính bằng giây.


1
Tại sao điều này tốt hơn chính xác cùng một lệnh ping được đề xuất trong câu trả lời khác?
RalfFriedl

Công bằng mà nói, đây là câu trả lời đầu tiên chỉ ra cách thực hiện một vòng lặp vô hạn mà không cần sử dụng goto.
Scott

0

Lừa đảo:

Sử dụng lệnh này để tạm dừng lô trong 10 giây

sự lựa chọn / n / t: c, <10> / c: cc

Bây giờ, đặt nó trong một vòng lặp không bao giờ kết thúc trong lô và voilà!


1
Hoặc, nếu bạn muốn, tải xuống bộ tài nguyên hoặc viết một prog đơn giản để ngủ 10. Tuy nhiên, phương pháp của tôi sẽ có nghĩa là bạn có thể di chuyển nó sang một máy khác mà không phải tải thêm phần mềm nữa.

Tôi không nghĩ choiceđã đến với XP và sau đó, hoặc ít nhất là tôi chưa thấy nó trên bất kỳ bản cài đặt nào gần đây.

1
Tôi đang chạy vanilla Vista Home Premium trên máy tính xách tay này và nó hoạt động tốt.

không có "sự lựa chọn" nào cho windows xp !!!
kokbira

0

Cài đặt Cygwin sẽ cung cấp sleepcroncung cấp cho bạn (trong số những thứ khác).


2
Quá mức cho những gì anh ta yêu cầu!

-1

bên dưới, nó vừa là một cách xấu xí vừa là một tệp đẹp của Windows - nó tiêu tốn rất nhiều thời gian của cpu để không làm gì cả, nhưng nó làm những gì bạn muốn và rất tuyệt.

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

một cách khác là thực hiện một số chuỗi vòng lặp, ví dụ như lặp lại (for / l %% i trong (1,1,65535) không đặt gì = 0) một số lần và "hiệu chỉnh" "bao nhiêu lần" bạn phải lặp lại thử nghiệm kết quả sau 10 giây, hahaha. nhưng đó là cách xấu nhất
kokbira

bạn cũng có thể tạo một số lô Windows để sử dụng làm chức năng (một để phân chia thời gian, một để chờ đợi ...) nhưng nó sẽ phức tạp hơn ...
kokbira

Tôi nghĩ rằng nó sẽ gây ra lỗi nếu bạn đang sử dụng nó từ 23:59:51 đến 23:59:59 - trong trường hợp đó, lô sẽ đợi mãi ... một số "nếu" sẽ giải quyết vấn đề ...
kokbira

nếu bạn muốn kiểm tra trong một thời gian cố định (không phải thời gian + 10 giây), bạn có thể chỉ cần thực hiện "nếu% time% geq 10:30 làm goto kết thúc". giải pháp trở nên phức tạp vì tổng ...
kokbira

Nó thực sự khủng khiếp. Trước hết, bận chờ đợi. lãng phí chu kỳ CPU không cần thiết không bao giờ là một ý tưởng tốt (trừ khi trên phần cứng nhúng). Điều này cũng không có vẻ hoạt động chính xác vào khoảng nửa đêm.
Joey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.