हर 10 सेकंड के बैच फ़ाइल में कुछ करें


24

मेरे पास एक बैच फ़ाइल है:

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

मैं विंडोज एक्सपी पर हर 10 सेकंड में इन दोनों कमांडों को कैसे कर सकता हूं?


3
आप इसे एक मिनट के लिए नीचे लाने के लिए विंडोज शेड्यूल किए गए कार्य का उपयोग कर सकते हैं।

यह विंडोज बैच के साथ संभव है: नीचे मेरा समाधान देखें। एकमात्र समस्या 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
पिछले दशक में किए गए विंडोज के किसी भी संस्करण के लिए सही उत्तर (प्रश्न में निर्दिष्ट विंडोज एक्सपी सहित)। धन्यवाद :-)
woot

यह वास्तव में इंतजार कर रहा है -1 - 99 999 सेकंड (~~ 1day3,7h। windows7) - /tकिसी भी कुंजी को दबाने के लिए OR में निर्दिष्ट संख्या - जिसे /NOBREAKपरम भेजकर बंद किया जा सकता है :)
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

पिंग कमांड 10 सेकंड के लिए निष्पादित करेगा, और सभी आउटपुट को NUL डिवाइस पर पुनर्निर्देशित किया जाएगा, जिसका अर्थ है कि आप पिंग कमांड से कोई आउटपुट नहीं देखेंगे। यह वास्तव में एक "नींद" कमांड के रूप में काम करता है।


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

संपादित करें: जैसा कि टिप्पणियों में बताया गया है, SLEEPएक सामान्य इंस्टॉल में उपलब्ध नहीं होगा। आपको विंडोज 2003 रिसोर्स किट जैसी किसी चीज़ की ज़रूरत होगी, या इसे अनुकरण करने के लिए कोई अन्य ट्रिक (पिंग ट्रिक ब्रूनो उल्लेख), और ऐसा करने के लिए नोट्स यहाँ मिल सकते हैं


6
नींद डिफ़ॉल्ट रूप से शामिल नहीं है। इसे पाने के लिए आपको संसाधन किट या कुछ और चाहिए?
marcc

मुझे वास्तव में क्या चाहिए?

यह नहीं है? मैं शपथ ले सकता था यह कुछ ऐसा था जिस पर मैं भरोसा कर सकता था, लेकिन मुझे लगता है कि choiceयह मानक द्वारा शामिल नहीं किया जा सकता है। मैं इसे और अधिक देखूंगा।

1
एक नींद आदेश "नकली" करने के लिए खिड़कियों पर कुछ और स्थापित करने की आवश्यकता नहीं है। एक उदाहरण के लिए मेरे उत्तर पर एक नज़र डालें।

1

अधिक सटीक समाधान एक बार अनजाने मेजबान को पिंग करना और टाइमआउट सेट करना

पिंग 1.0.0.0-एन 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
यह उसी पिंग कमांड से बेहतर क्यों है जो किसी अन्य उत्तर में सुझाई गई है?
राल्फफ्राइडल

निष्पक्ष होने के लिए, यह पहला उत्तर है जो दिखाता है कि बिना उपयोग किए अनंत लूप कैसे करें goto
स्कॉट

0

धोखा:

10 सेकंड के लिए बैच को रोकने के लिए इस कमांड का उपयोग करें

पसंद / एन / टी: सी, <10> / सी: सीसी

अब, इसे एक कभी न खत्म होने वाले लूप में बैच और वायलिया में रखें!


1
या, यदि आप चाहते हैं, संसाधन किट डाउनलोड करें या सोने के लिए एक सरल प्रोग लिखें 10. मेरा तरीका हालांकि, इसका मतलब यह होगा कि आप इसे फिर से और सॉफ़्टवेयर डाउनलोड किए बिना किसी अन्य मशीन में स्थानांतरित कर सकते हैं।

मुझे नहीं लगा कि choiceXP और बाद में आया, या कम से कम मैंने इसे किसी भी हाल के इंस्टॉल पर नहीं देखा है।

1
मैं इस लैपटॉप पर वैनिला विस्टा होम प्रीमियम चला रहा हूं और यह ठीक काम करता है।

विंडोज़ XP के लिए कोई "विकल्प" नहीं है !!!
कोकबीरा

0

Cygwin स्थापित करें जो आपको sleepऔर cronअन्य चीजों के बीच उपलब्ध कराएगा


2
वह क्या पूछ रहा है के लिए ओवरकिल!

-1

नीचे, यह एक बदसूरत और एक सुंदर तरीका है, एक विंडोज बैच फ़ाइल - यह कुछ भी नहीं करने के लिए बहुत से 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 सेकंड में, हाहाहा। लेकिन यह सबसे बदसूरत तरीका है।
कोकबीरा

आप फ़ंक्शन के रूप में उपयोग करने के लिए कुछ विंडोज बैच भी बना सकते हैं (एक समय विभाजित करने के लिए, एक प्रतीक्षा करने के लिए ...) लेकिन यह अधिक जटिल होगा ...
कोकबीरा

मुझे लगता है कि यदि आप 23:59:51 से 23:59:59 तक इसका उपयोग कर रहे हैं तो यह एक बग पैदा करेगा - इस मामले में, बैच हमेशा इंतजार करेगा ... कुछ "अगर" समस्या को हल करेगा ...
kokbira

यदि आप एक निश्चित समय के लिए परीक्षण करना चाहते हैं (एक समय + 10 सेकंड नहीं) तो आप बस "यदि% समय% geq 10:30 doo अंत करें" कर सकते हैं। समाधान जटिल हो गया क्योंकि योग ...
कोकबीरा

यह वास्तव में भयानक है। सबसे पहले, व्यस्त प्रतीक्षा। अनावश्यक रूप से सीपीयू चक्र बर्बाद करना एक अच्छा विचार नहीं है (जब तक कि एम्बेडेड हार्डवेयर पर)। यह भी आधी रात के आसपास सही ढंग से काम नहीं करता है।
जॉय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.