it-swarm.asia

كيفية النوم لمدة 5 ثوان في ملف دفعي/كمد؟

يمكن لأداة Snipping من Windows التقاط الشاشة ، لكن في بعض الأحيان أرغب في التقاط الشاشة بعد 5 ثوانٍ ، مثل التقاط صورة يتم عرضها بواسطة كاميرا الويب. (قم بتشغيل البرنامج النصي وابتسم على الكاميرا ، على سبيل المثال).

سؤالي هو: كيف تنام لمدة 5 ثوانٍ في ملف دفعي؟

615
太極者無極而生

أحد الاختراقات هو (mis) استخدام الأمر ping:

ping 127.0.0.1 -n 6 > nul

تفسير:

  • ping هو أداة مساعدة للنظام ترسل طلبات ping. ping متاح في جميع إصدارات Windows.
  • 127.0.0.1 هو عنوان IP الخاص بـ localhost . عنوان IP هذا مضمون لحله دائمًا ، ويمكن الوصول إليه ، والرد الفوري على الأصوات.
  • -n 6 يحدد أنه يجب أن يكون هناك 6 أصوات. هناك تأخير لمدة دقيقة واحدة بين كل اختبار ping ، لذلك تحتاج إلى إرسال 6 أصوات للتأخير لمدة 5 ثوان.
  • > nul منع إخراج ping ، بواسطة إعادة التوجيه إلى nul .
769
Martin

أنا مندهش جدًا ولم يذكرها أحد:

C:\> timeout 5

N. يرجى ملاحظة (شكرا دان!) أن timeout 5 تعني:

النوم في أي مكان بين 4 و 5 ثوان

يمكن التحقق من ذلك بشكل تجريبي عن طريق وضع ما يلي في ملف دفعي ، وتشغيله بشكل متكرر وحساب الفوارق الزمنية بين echos الأول والثاني:

@echo off
echo %time%
timeout 5 > NUL
echo %time%
1321
asveikau

جرب اختيار الأمر. لقد كانت موجودة منذ MSDOS 6.0 ، وينبغي أن تفعل الخدعة.

استخدم المعلمة/T لتحديد المهلة بالثواني والمعلمة/D لتحديد التحديد الافتراضي وتجاهل ثم الاختيار المحدد.

الشيء الوحيد الذي قد يكون مشكلة هو إذا قام المستخدم بكتابة أحد أحرف الاختيار قبل انقضاء فترة المهلة. الحل البديل الجزئي هو تعميق الموقف - استخدم وسيطة/N لإخفاء قائمة الخيارات الصالحة ولديه حرف واحد فقط في مجموعة الاختيارات ، وبالتالي سيكون من المحتمل أن يكتب المستخدم اختيارًا صالحًا قبل انتهاء المهلة.

يوجد أدناه نص التعليمات على نظام التشغيل Windows Vista. أعتقد أن هذا هو نفسه على نظام XP ، لكن انظر إلى نص التعليمات على جهاز كمبيوتر [XP) للتحقق.

C:\>CHOICE /?

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

Description:
    This tool allows users to select one item from a list
    of choices and returns the index of the selected choice.

Parameter List:
   /C    choices       Specifies the list of choices to be created.
                       Default list is "YN".

   /N                  Hides the list of choices in the Prompt.
                       The message before the Prompt is displayed
                       and the choices are still enabled.

   /CS                 Enables case-sensitive choices to be selected.
                       By default, the utility is case-insensitive.

   /T    timeout       The number of seconds to pause before a default
                       choice is made. Acceptable values are from 0 to
                       9999. If 0 is specified, there will be no pause
                       and the default choice is selected.

   /D    choice        Specifies the default choice after nnnn seconds.
                       Character must be in the set of choices specified
                       by /C option and must also specify nnnn with /T.

   /M    text          Specifies the message to be displayed before
                       the Prompt. If not specified, the utility
                       displays only a Prompt.

   /?                  Displays this help message.

   NOTE:
   The ERRORLEVEL environment variable is set to the index of the
   key that was selected from the set of choices. The first choice
   listed returns a value of 1, the second a value of 2, and so on.
   If the user presses a key that is not a valid choice, the tool
   sounds a warning beep. If tool detects an error condition,
   it returns an ERRORLEVEL value of 255. If the user presses
   CTRL+BREAK or CTRL+C, the tool returns an ERRORLEVEL value
   of 0. When you use ERRORLEVEL parameters in a batch program, list
   them in decreasing order.

Examples:
   CHOICE /?
   CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."
   CHOICE /T 10 /C ync /CS /D y
   CHOICE /C ab /M "Select a for option 1 and b for option 2."
   CHOICE /C ab /N /M "Select a for option 1 and b for option 2."
67
Adam Porad

الاختراق التالي يتيح لك النوم لمدة 5 ثوانٍ

ping -n 6 127.0.0.1 > nul

نظرًا لأن ping ينتظر ثانية بين الأصوات ، يجب عليك تحديد واحدة أكثر مما تحتاج.

49
noctonura

إذا كان لديك PowerShell على نظامك ، يمكنك فقط تنفيذ هذا الأمر:

powershell -command "Start-Sleep -s 5"

تحرير: أثار الأشخاص مشكلة حيث يكون مقدار الوقت الذي تستغرقه عملية بدء powerhell كبيرًا مقارنةً بالوقت الذي تحاول أن تنتظره. إذا كانت دقة وقت الانتظار مهمة (أي أن التأخير الإضافي الثاني أو الثاني غير مقبول) ، يمكنك استخدام هذه الطريقة:

powershell -command "$sleepUntil = [DateTime]::Parse('%date% %time%').AddSeconds(5); $sleepDuration = $sleepUntil.Subtract((get-date)).TotalMilliseconds; start-sleep -m $sleepDuration"

يستغرق هذا الوقت الذي تم فيه إصدار الأمر windows ، وينام البرنامج النصي powerhell حتى 5 ثوانٍ بعد ذلك الوقت. طالما أن استخدام بوويرشيل يستغرق وقتًا أقل من مدة نومك ، فستعمل هذه الطريقة (حوالي 600 مللي ثانية على الجهاز الخاص بي).

37
Niall Connaughton

يمكنك جعله مع timeout:

سيكون هذا مرئيًا: timeout 5

لن يكون هذا مرئيًا timeout 5 >nul

35
Alex

لا يمكننا أن نفعل waitfor /T 180؟

waitfor /T 180 pause سيؤدي إلى "خطأ: انتهت مهلة انتظار" توقف "."

waitfor /T 180 pause >nul سوف يكتسح هذا "الخطأ" تحت السجادة

يجب أن يكون الأمر waitfor موجودًا في نظام التشغيل Windows بعد Win95

في الماضي قمت بتنزيل ملف قابل للتنفيذ باسم sleep يعمل على سطر الأوامر بعد وضعه في طريقك.

على سبيل المثال: sleep shutdown -r -f /m \\yourmachine بالرغم من أن إيقاف التشغيل الآن به خيار مدمج

29
joe li

Timeout /t 1 >nul

يشبه التوقف المؤقت في ثانية واحدة ، يمكنك أن تأخذ ما يقرب من 100.000 (99.999) ثانية. إذا كنت متصلاً بالإنترنت ، فإن أفضل حل هو:

ping 1.1.1.1. -n 1 -w 1000 >nul

عند إجراء اختبار ping لك بالمللي ثانية ، ستكون ثانية واحدة 1000 مللي ثانية. لكن الأمر ping قليل التافه ، فهو لا يعمل بنفس الطريقة على الأجهزة غير المتصلة. المشكلة هي أن الجهاز يصبح مرتبكًا لأنه غير متصل بالإنترنت ، ويرغب في اختبار ping a website/server/Host/ip ، لكنه لا يستطيع ذلك. لذلك أود أن أوصي مهلة. حظا سعيدا!

23
Jonathan

تم تضمين SLEEP 5 في بعض مجموعات موارد Windows.

تم تضمين TIMEOUT 5 في بعض مجموعات موارد Windows ، ولكنه أصبح الآن أمرًا قياسيًا في نظامي التشغيل Windows 7 و 8 (غير متأكد من نظام التشغيل Vista).

PING 1.1.1.1 -n 1 -w 5000 >NUL بالنسبة لأي إصدار MS-DOS أو Windows مع عميل TCP/IP ، يمكن استخدام PING لتأخير التنفيذ لعدد من الثواني.

NETSH badcommand (Windows XP/Server 2003 فقط) أو CHOICE

هذا الرابط سوف يساعدك أكثر .

17
Amir

إجابتين:

أولاً ، للتأخير في ملف دفعي ، ببساطة دون كل الأساليب غير الواضحة التي يقترحها الناس:

timeout /t <TimeoutInSeconds> [/nobreak] 

http://technet.Microsoft.com/en-us/library/cc754891.aspx

ثانياً ، تجدر الإشارة إلى أنه على الرغم من أنه قد لا يفعل ما تريده بالضبط ، باستخدام أداة القطع المدمجة في نظام Windows ، يمكنك تشغيله دون استخدام الماوس. شغّل أداة القطع ، وهروب من القصاصة الحالية ولكن اترك الأداة قيد التشغيل ، واضغط على Control + Print Screen عندما تريد أن يحدث القصاص. هذا لا ينبغي أن يتداخل مع كل ما تحاول القنص.

12
Ned Martin

كنت أحاول القيام بذلك من داخل مهمة msbuild ، ولم يعمل الاختيار والوقت على حد سواء بسبب إعادة توجيه الإدخال/الإخراج.

انتهى بي الأمر باستخدام sleep.exe من http://sourceforge.net/projects/unxutils ، وهو أمر جميل لأنه لا يتطلب أي تثبيت وهو صغير جدًا.


محاولة مع choice:

<Target Name="TestCmd">
  <Exec Command="choice /C YN /D Y /t 5 " />
</Target>

النتائج في:

TestCmd:
  choice /C YN /D Y /t 5

EXEC : error : The file is either empty or does not contain the valid choices. [test.proj]
  [Y,N]?
C:\test.proj(5,9): error MSB3073: The command "choice /C YN /D Y /t 5 " exited with code 255.

محاولة مع timeout:

<Target Name="TestCmd">
  <Exec Command="timeout /t 5 " />
</Target>

النتائج في:

TestCmd:
  timeout /t 5
EXEC : error : Input redirection is not supported, exiting the process immediately. [test.proj]
C:\test.proj(5,7): error MSB3073: The command "timeout /t 5 " exited with code 1.

وبصرف النظر:

أنا أستخدم فعلاً <Exec Command="sleep 2 & dbghost.exe" /> لأنني أقوم بتنفيذ dbghost.exe عدة مرات على التوازي ويقوم بإنشاء ملفات/قواعد بيانات temp استنادًا إلى وقت Epoch الحالي بالثواني - مما يعني بالطبع إذا بدأت مثيلات متعددة ، يستخدم كل منها نفس اسم temp. كنت أصلاً أحاول استخدام أمر MSBuild Extension Pack Thread.Sleep ، لكن يبدو أنه (عادةً) كان يعمل على تشغيل مهمة السكون جيدًا ، ولكن بعد ذلك بدأ تشغيل المهمة <exec> في جميع مؤشرات الترابط في نفس الوقت ، وستفشل بالطبع dbghost.exe مع الصراعات. حتى الآن ، يبدو أن استخدام sleep.exe أكثر موثوقية.

10
gregmac

هذا هو أحدث إصدار لما أستخدمه في الممارسة العملية لمدة عشر ثوانٍ مؤقتًا لرؤية الإخراج عند انتهاء البرنامج النصي.

BEST>@echo done
BEST>@set DelayInSeconds=10
BEST>@rem Use ping to wait
BEST>@ping 192.0.2.0 -n 1 -w %DelayInSeconds%000 > nul

يسمح لي الصدى الذي تم إجراؤه برؤية وقت انتهاء البرنامج النصي ويوفر ping التأخير. تعني علامات @ الإضافية أنني أرى النص "تم" وأن الانتظار يحدث بدون أن يصرفني أمرهم.

لقد جربت العديد من الحلول المقدمة هنا على جهاز XP ، لأن الفكرة كانت أن يكون لديك ملف دفعي يعمل على مجموعة متنوعة من الأجهزة ، ولذا اخترت الجهاز XP لأن البيئة من المحتمل أن تكون الأقل قدرة.

GOOD> ping 192.0.2.0 -n 1 -w 3000 > nul

يبدو أن هذا يعطي تأخيرًا لمدة ثلاثة ثوانٍ كما هو متوقع. محاولة واحدة بينغ دائم 3 ثوان.

BAD> ping -n 5 192.0.2.0 > nul

استغرق هذا حوالي 10 ثوان (وليس 5). توضيحي هو أن هناك 5 محاولات ping ، كل واحدة عن بعضها البعض ، مما يجعل 4 ثوان. ومن المحتمل أن تكون كل محاولة ping قد استغرقت حوالي ثانية تقريبًا ما مجموعه 9 ثوانٍ في المجموع.

BAD> timeout 5
BAD> sleep /w2000
BAD> waitfor /T 180
BAD> choice

الأوامر غير متوفرة.

BAD> ping 192.0.2.0 -n 1 -w 10000 > nul :: wait 10000 milliseconds, ie 10 secs

جربت أعلاه أيضًا ، بعد قراءة أنه يمكن إضافة التعليقات إلى ملفات BAT باستخدام نقطتين متتاليتين. ومع ذلك عاد البرنامج على الفور تقريبا. وضع التعليق على خطها الخاص قبل تنفيذ الأمر بشكل جيد.

GOOD> :: wait 10000 milliseconds, ie 10 secs
GOOD> ping 192.0.2.0 -n 1 -w 10000 > nul

لفهم ما يفعله ping بشكل عملي ، ركضت

ping 192.0.2.0 -n 5 -w 5000

استغرق هذا حوالي 30 ثانية ، على الرغم من 5 * 5 = 25. توضيحي هو أن هناك 5 محاولات ping تستغرق كل منها 5 ثوانٍ ، لكن هناك تأخيرًا واحدًا تقريبًا بين محاولات ping: هناك سبب وجيه لتوقع نتيجة مختلفة إذا قمت بالاتصال مرة أخرى على الفور ومن الأفضل إعطاء شبكة القليل من الوقت للتعافي من أي مشكلة كان لديه.

تحرير: سرقت من وظيفة أخرى ، .. RFC 3330 يقول عنوان IP 192.0.2.0 يجب ألا يظهر على شبكة الإنترنت ، لذلك فإن اختبار الاتصال بهذا العنوان يمنع هذه الاختبارات من البريد المزعج لأي شخص! لقد عدلت النص أعلاه وفقا لذلك!

6
user3070485

انا فعلت هذا. إنها تعمل وتظهر الوقت المتبقي في ثوان. إذا كنت ترغب في استخدامه ، أضف إلى ملف دفعي:

call wait 10

كان يعمل عندما اختبرت ذلك.

سرد wait.bat (يجب أن يكون في دليل العمل أو windir/system32/):

@echo off

set SW=00

set SW2=00

set /a Sec=%1-1

set il=00
@echo Wait %1 second
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TBASE=((HH*60+MM)*60+SS)*100+CC, SW=CC 

set /a TFIN=%TBASE%+%100

:ESPERAR
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, 

CC=1%%D-100, TACTUAL=((HH*60+MM)*60+SS)*100+CC,  SW2=CC


if %SW2% neq %SW% goto notype
if %il%==0 (echo Left %Sec% second & set /a Sec=sec-1 & set /a il=il+1)
goto no0
:notype
set /a il=0
:no0

if %TACTUAL% lss %TBASE% set /a TACTUAL=%TBASE%+%TACTUAL%
if %TACTUAL% lss %TFIN% goto ESPERAR
5
user1884308

طريقتان أخريان يجب أن تعملا على كل شيء من XP وما فوق:

مع w32tm

w32tm /stripchart /computer:localhost /period:5 /dataonly /samples:2  1>nul 

اشتراكاتك typeperf:

typeperf "\System\Processor Queue Length" -si 5 -sc 1 >nul
5
npocmaka

يمكنك استخدام VBScript ، على سبيل المثال ، ملف myscript.vbs:

set wsobject = wscript.createobject("wscript.Shell")

do while 1=1
    wsobject.run "SnippingTool.exe",0,TRUE
    wscript.sleep 3000
loop

ملف دفعي:

cscript myscript.vbs %1
4
Dani

تحسين الكود الذي اقترحه المستخدم Aacini ، له دقة مئات من الثانية ولا يفشل عندما يصل الوقت إلى 23: 59: 59،99:

for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TBASE=((HH*60+MM)*60+SS)*100+CC

:: Example delay 1 seg.
set /a TFIN=%TBASE%+100

:ESPERAR
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TACTUAL=((HH*60+MM)*60+SS)*100+CC

if %TACTUAL% lss %TBASE% set /a TACTUAL=%TBASE%+%TACTUAL%
if %TACTUAL% lss %TFIN% goto ESPERAR
3
Rober

يمكن القيام بذلك من خلال سطرين بسيطين في ملف دفعي: اكتب ملفًا مؤقتًا .vbs في المجلد %temp% واتصل به:

echo WScript.Sleep(5000) >"%temp%\sleep.vbs"
cscript "%temp%\sleep.vbs"
3
AjV Jsy

أسهل طريقة لفعل ذلك هي:

قم بتنزيل Sleep.exe على http://www.sleepcmd.com/ . يجب أن يكون ملف exe في نفس المجلد مثل البرنامج الذي كتبته!

3
Xavi

أستخدم الطريقة التالية بالكامل بناءً على إمكانيات نظام التشغيل Windows XP لإجراء تأخير في ملف دفعي:

ملف DELAY.BAT

@ECHO OFF
REM DELAY seconds

REM GET ENDING SECOND
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100,     S=1%%C%%100, ENDING=(H*60+M)*60+S+%1

REM WAIT FOR SUCH A SECOND
:WAIT
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100, S=1%%C%%100, CURRENT=(H*60+M)*60+S
IF %CURRENT% LSS %ENDING% GOTO WAIT

يمكنك أيضًا إدراج اليوم في الحساب بحيث تعمل الطريقة أيضًا عند مرور فترة التأخير خلال منتصف الليل.

3
Aacini
PING -n 60 127.0.0.1>nul

في حالة عدم توفر محول LAN الخاص بك.

2
user3584216

إذا كان لديك إصدار مناسب من Windows و Windows Server 2003 Resource Kit Tools ، فهو يتضمن أمر السكون للبرامج الدفعية. المزيد على: http://malektips.com/xp_dos_0002.html

2
GreenMatt

قم بإنشاء ملف cmd يسمى sleep.cmd:

REM Usage: SLEEP Time_in_MiliSECONDS
@ECHO off
ping 1.0.0.0 -n 1 -w %1 > nul

انسخ sleep.cmd إلى c:\windows\system32

الاستعمال:

sleep 500

ينام لمدة 0.5 ثانية. الحجج في مللي. بمجرد نسخها إلى System32 ، يمكن استخدامها في كل مكان.

تحرير: يجب أن تكون بعيدًا عن ذلك إذا لم يكن الجهاز متصلاً بشبكة (قل محمولًا تستخدمه في المترو) ، فإن خدعة ping لا تعمل حقًا بعد الآن.

1
thebunnyrules

في Windows XP SP3 ، يمكنك استخدام أمر السكون

1
Andres

ينتظر ping حوالي 5 ثوانٍ قبل انتهاء المهلة ، وليس ثانية واحدة كما ذكر أعلاه. هذا ما لم تقم أخبر أن تنتظر لمدة ثانية واحدة فقط قبل انتهاء المهلة.

ping 1.0.0.1 -n 1 -w 1000

سيتم اختبار ping مرة واحدة ، انتظر ثانية واحدة فقط (1000 مللي ثانية) للرد ، ثم انقضت المهلة.

لذلك تقريبًا 20 ثانية سيكون التأخير:

ping 1.0.0.1 -n 20 -w 1000

0
LionelGoulet

حسنا هذا يعمل إذا كان لديك خيار أو بينغ.

@echo off
echo.
if "%1"=="" goto askq
if "%1"=="/?" goto help
if /i "%1"=="/h" goto help
if %1 GTR 0 if %1 LEQ 9999 if /i "%2"=="/q" set ans1=%1& goto quiet
if %1 GTR 0 if %1 LEQ 9999 set ans1=%1& goto breakout
if %1 LEQ 0 echo %1 is not a valid number & goto help
if not "%1"=="" echo.&echo "%1" is a bad parameter & goto help
goto end

:help
echo SLEEP runs interactively (by itself) or with parameters (sleep # /q )
echo where # is in seconds, ranges from 1 - 9999
echo Use optional parameter /q to suppress standard output 
echo or type /h or /? for this help file
echo.
goto end

:askq
set /p ans1=How many seconds to sleep? ^<1-9999^> 
echo.
if "%ans1%"=="" goto askq
if %ans1% GTR 0 if %ans1% LEQ 9999 goto breakout
goto askq

:quiet
choice /n /t %ans1% /d n > nul
if errorlevel 1 ping 1.1.1.1 -n 1 -w %ans1%000 > nul
goto end

:breakout
choice /n /t %ans1% /d n > nul
if errorlevel 1 ping 1.1.1.1 -n 1 -w %ans1%000 > nul
echo Slept %ans1% second^(s^)
echo.

:end

مجرد تسميته sleep.cmd أو sleep.bat وتشغيله

0
Doctor DOS

كتبت برنامج powerbasic wait.exe ، حيث يمكنك تمرير معلمة ميلي ثانية إليه في ملف الدُفعات الخاص بك

wait 3000
system('c:/windows/system32/SnippingTool.exe')

رمز EXE:

FUNCTION PBMAIN()
  c$ = Command$
  s! = Val(c$)*1000
  Sleep s!         
END FUNCTION
0
Shawn