ทำบางสิ่งบางอย่างทุก ๆ 10 วินาทีไฟล์แบทช์


24

ฉันมีไฟล์แบทช์:

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

ฉันจะทำสองคำสั่งเหล่านี้บน Windows XP ทุก ๆ 10 วินาทีได้อย่างไร


3
คุณสามารถใช้งาน Windows Scheduled เพื่อลดความเสี่ยงลงได้หนึ่งครั้งต่อนาที

เป็นไปได้ด้วยแบทช์ 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 วินาที (~~ 1 วัน 3, 7h | windows7) - หมายเลขที่ระบุใน/tหรือสำหรับการกดปุ่มใด ๆ - ที่สามารถปิดได้โดยส่ง/NOBREAKparam :)
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 มันใช้งานได้จริงตามคำสั่ง "sleep"


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

แก้ไข:ดังที่กล่าวไว้ในความคิดเห็นSLEEPจะไม่สามารถใช้ได้ในการติดตั้งปกติ คุณจะต้องสิ่งที่ต้องการทรัพยากร Kit การ Windows 2003 หรือบางส่วนเคล็ดลับอื่น ๆ มันแกล้ง (เคล็ดลับการ Ping บรูโน่กล่าวถึง) และบันทึกจะทำเช่นนั้นสามารถพบได้ที่นี่


6
โหมดสลีปจะไม่รวมอยู่ในค่าเริ่มต้น คุณต้องการชุดทรัพยากรหรืออะไรที่จะได้รับนี้
marcc

ฉันต้องการอะไรอย่างแน่นอน

มันไม่ใช่เหรอ ฉันสาบานได้ว่ามันเป็นสิ่งที่ฉันสามารถไว้ใจได้ แต่ฉันคิดว่าchoiceมันอาจไม่รวมอยู่ในมาตรฐาน ฉันจะดูมันมากกว่านี้

1
ไม่จำเป็นต้องติดตั้งอะไรบน windows เพื่อ "ปลอม" คำสั่ง sleep ลองดูคำตอบของฉันสำหรับตัวอย่าง

1

โซลูชันที่แม่นยำยิ่งขึ้น ping โฮสต์ที่ไม่มีอยู่หนึ่งครั้งและตั้งค่าการหมดเวลา

ping 1.0.0.0 -n 1 -w 10000> nul

แต่มันสร้างทราฟฟิกของปรสิต


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
หรือถ้าคุณต้องการดาวน์โหลดชุดทรัพยากรหรือเขียน prog ง่าย ๆ ที่จะนอนหลับ 10 อย่างไรก็ตามวิธีการของฉันจะหมายความว่าคุณสามารถย้ายไปยังเครื่องอื่นโดยไม่ต้องดาวน์โหลดซอฟต์แวร์เพิ่มเติมอีกครั้ง

ฉันไม่คิดว่าจะchoiceมาพร้อมกับ XP และหลังจากนั้นหรืออย่างน้อยฉันก็ไม่เห็นมันในการติดตั้งล่าสุด

1
ฉันใช้วานิลลาวิสต้าโฮมพรีเมียมบนแล็ปท็อปเครื่องนี้และใช้งานได้ดี

ไม่มี "ตัวเลือก" สำหรับ windows xp !!!
kokbira

0

ติดตั้งCygwinซึ่งจะให้บริการsleepและcronพร้อมให้คุณใช้ (เหนือสิ่งอื่นใด)


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

อีกวิธีหนึ่งคือการทำลำดับลูปตัวอย่างเช่นการทำซ้ำ (สำหรับ / l %% i ใน (1,1,65535) ทำอะไรเลย = 0) บางครั้งและ "สอบเทียบ" "กี่ครั้ง" คุณต้องทำการทดสอบซ้ำ ผลใน 10 วินาทีฮ่าฮ่าฮ่า แต่มันเป็นวิธีที่น่าเกลียดที่สุด
kokbira

คุณยังสามารถสร้างแบทช์ของ Windows บางส่วนเพื่อใช้เป็นฟังก์ชั่น (หนึ่งถึงแบ่งเวลาหนึ่งที่จะรอ ... ) แต่มันจะซับซ้อนมากขึ้น ...
kokbira

ฉันคิดว่ามันจะทำให้เกิดข้อผิดพลาดถ้าคุณใช้มันจาก 23:59:51 ถึง 23:59:59 - ในกรณีนี้แบทช์จะรอตลอดไป ... บางคน "ถ้าเป็น" จะแก้ปัญหา ...
kokbira

หากคุณต้องการทดสอบเวลาที่กำหนด (ไม่ใช่เวลา + 10sec) คุณสามารถทำ "ถ้า% เวลา% geq 10:30 ทำไปจนจบ" วิธีแก้ปัญหากลายเป็นเรื่องซับซ้อนเพราะผลรวม ...
kokbira

มันน่ากลัวจริง ๆ ก่อนอื่นรอไม่ว่าง การสูญเสียรอบการทำงานของ CPU โดยไม่จำเป็นนั้นไม่ใช่ความคิดที่ดีเลย ดูเหมือนว่าจะทำงานไม่ถูกต้องในช่วงเที่ยงคืน
Joey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.