web-dev-qa-db-ja.com

バッチファイルで5秒間スリープする方法/ cmd

Windowsのスニッピングツールで画面をキャプチャできますが、ウェブカメラで表示されている画像を撮影するなど、5秒後に画面をキャプチャしたいことがあります。 (たとえば、スクリプトを実行してカメラに向かって笑ってください。)

バッチファイルで5秒間スリープするにはどうすればよいですか?

622

1つのハックは、pingコマンドを(誤って)使用することです。

ping 127.0.0.1 -n 6 > nul

説明:

  • ping は、ping要求を送信するシステムユーティリティです。 pingは、Windowsのすべてのバージョンで利用可能です。
  • 127.0.0.1localhost のIPアドレスです。このIPアドレスは、常に解決され、到達可能であり、pingに即座に応答することが保証されています。
  • -n 6は、pingが6回あることを指定します。各pingの間に1秒の遅延があるので、5秒の遅延のためには6つのpingを送信する必要があります。
  • > nulは、 リダイレクト itを ping にすることで、nulの出力を抑制します。
778
Martin

私は誰も言わなかったことにとても驚いています。

C:\> timeout 5

N.B。timeout 5は次のことを意味します(Danに感謝します)。

4秒から5秒の間に眠る

これは、次のものをバッチファイルに入れて繰り返し実行し、1番目と2番目のechoの間の時間差を計算することによって経験的に検証できます。

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

選択 コマンドを試してください。それはMSDOS 6.0から出回っていて、そしてトリックをするべきです。

/ Tパラメータを使用してタイムアウトを秒単位で指定し、/ Dパラメータを使用してデフォルトの選択を指定し、選択した選択を無視します。

問題になる可能性があることの1つは、タイムアウト期間が経過する前にユーザーが選択文字の1つを入力した場合です。部分的な回避策は状況を難読化することです - 有効な選択肢のリストを隠し、選択肢のセットに1文字しかないようにするには/ 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."
68
Adam Porad

次のハックで5秒間寝ましょう

ping -n 6 127.0.0.1 > nul

Pingはpingの間1秒待つので、必要以上に1つ指定する必要があります。

49
noctonura

システムに PowerShell がある場合は、次のコマンドを実行するだけです。

powershell -command "Start-Sleep -s 5"

編集:人々はPowerShellが起動するのにかかる時間があなたが待とうとしている時間と比較して重要であるという問題を提起しました。待機時間の精度が重要な場合(つまり、1秒または2秒の余分な遅延が許容できない場合)は、次の方法を使用できます。

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

これにはwindowsコマンドが発行された時間がかかり、powershellスクリプトはその時間の5秒後までスリープします。だから、PowerShellがあなたの睡眠時間よりも起動するのにかかる時間が少ない限り、このアプローチはうまくいくでしょう(私のマシンでは約600msです)。

37

timeoutでそれを作ることができます:

これが表示されます:timeout 5

これは表示されませんtimeout 5 >nul

36
Alex

waitfor /T 180できませんか?

waitfor /T 180 pauseは、「エラー: 'pause'の待機中にタイムアウトしました」という結果になります。

waitfor /T 180 pause >nulは敷物の下でその「エラー」を一掃します

waitforコマンドは、Windows 95以降のWindows OSにあるはずです。

過去に私はsleepという名前の実行ファイルをダウンロードしました。これはあなたがパスに入れた後にコマンドラインで動作します。

例えば、sleep shutdown -r -f /m \\yourmachineですが、shutdownには-tオプションが組み込まれています

29
joe li

Timeout /t 1 >nul

1秒で一時停止するようなものですが、ほぼ100.000(99.999)秒までの間に水を入れることができます。インターネットに接続している場合、最善の解決策は次のとおりです。

ping 1.1.1.1. -n 1 -w 1000 >nul

Pingを実行するとミリ秒単位でカウントされるため、1秒は1000ミリ秒になります。しかし、pingコマンドは少し不確かです。オフラインマシンでは同じようには機能しません。問題は、オフラインであるためにマシンが混乱し、website/server/Host/ipをpingしたいのですが、できないことです。だから私はタイムアウトをお勧めします。がんばろう!

23
Jonathan

SLEEP 5は一部のWindowsリソースキットに含まれていました。

TIMEOUT 5は一部のWindowsリソースキットに含まれていましたが、現在はWindows 7および8の標準コマンドです(Vistaについてはよくわかりません)。

PING 1.1.1.1 -n 1 -w 5000 >NUL TCP/IPクライアントを使用するMS-DOSまたはWindowsのバージョンでは、PINGを使用して実行を数秒間遅らせることができます。

NETSH badcommand(Windows XP/Server 2003のみ)またはCHOICE

このリンクはもっと役に立ちます

17
Amir

二つの答え:

まず、バッチファイルを遅らせるために、人々が提案しているすべての鈍い方法を使わずに単純にします。

timeout /t <TimeoutInSeconds> [/nobreak] 

http://technet.Microsoft.com/ja-jp/library/cc754891.aspx

第二に、それはあなたが望んでいることを正確にはしないかもしれませんが、作り付けのWindowsのスニップツールを使用して、あなたがマウスを使用せずにそれにスニップを引き起こすことができることを言及する価値があります。スニップツールを実行し、現在のスニップから脱出しますが、ツールは実行したままにして、スニップを実行したいときにCtrl + Print Screenを押します。これはあなたが切り取ろうとしているものが何であれ妨害するべきではありません。

12
Ned Martin

私はmsbuildタスク内からこれを実行しようとしていました、そして選択とタイムアウトは両方ともI/Oリダイレクトのためにうまくいきませんでした。

私は http://sourceforge.net/projects/unxutils からsleep.exeを使用することになりました。それは小さいです。


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.

余談:

Dbghost.exeを複数回並行して実行し、現在のEpoch時間に基づいて一時ファイル/データベースを作成するため、実際には<Exec Command="sleep 2 & dbghost.exe" />を使用しています。もちろん、複数のインスタンスを起動すると、それぞれ同じ一時名が使用されます。私はもともとMSBuild Extension PackのThread.Sleepコマンドを使おうとしていましたが、(通常は)sleepタスクを正常に実行していましたが、その後すべてのスレッドで<exec>タスクを同時に開始すると、もちろんdbghost.exeは失敗します。衝突します。これまでのところ、sleep.exeを使用する方が信頼性が高いようです。

10
gregmac

これは、スクリプトが終了したときに出力を表示するために10秒間休止するために実際に使用しているものの最新バージョンです。

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が遅延を提供するかを確認できます。余分な@記号は、 "done"というテキストが表示されていることを意味しています。待機しているのは、それらのコマンドに気を取られることなくです。

このアイデアはXPマシン上でさまざまな解決策を試してみました。アイデアはさまざまなマシン上で実行されるバッチファイルを用意することなので、XPマシンを選びました。環境としては能力が最も低いと思われます。

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

これは予想どおり3秒の遅れを与えるようでした。指定された3秒間続く1回のping試行。

BAD> ping -n 5 192.0.2.0 > nul

これは約10秒かかりました(5ではありません)。私の説明では、pingの試行回数は5回で、それぞれ1秒間隔で4秒になります。そして、各pingの試行はおそらく1秒程度続き、推定で合計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

2つの連続したコロンを使用してBATファイルにコメントを追加できることを読んだ後、私も上記を試しました。しかし、ソフトウェアはすぐに戻ってきました。 pingを実行する前にコメントを一行に入れてください。

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

5 * 5 = 25であっても、これは約30秒かかりました。私の説明は、それぞれ5秒間続く5回のping試行があるが、ping試行間には約1秒の時間遅れがあるということです。すぐにもう一度pingを実行した場合、別の結果が予想されるのにはほとんど理由があります。それが持っていたどんな問題からでも回復するために少しの時間ネットワーク。

編集: 別の投稿 から盗まれた、.. RFC 3330 はIPを言うアドレス192.0.2.0はインターネット上には表示されないはずなので、このアドレスにpingを送信すると、これらのテストで誰かがスパムすることを防げます。それに応じて上記のテキストを修正しました。

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以上のすべてに有効な方法が2つあります。

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によって提案されたコードの改良、それは100分の1秒の分解能を持ち、時間が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

これは、バッチファイル内に2行の簡単な行で実行できます。一時的な.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

計算に日を挿入して、遅延間隔が深夜0時を過ぎたときにもこの方法が機能するようにすることもできます。

3
Aacini
PING -n 60 127.0.0.1>nul

lANアダプタが利用できない場合.

2
user3584216

適切なバージョンのWindowsと Windows Server 2003リソースキットツール がある場合は、バッチプログラム用のsleepコマンドが含まれます。さらに詳しく: http://malektips.com/xp_dos_0002.html

2
GreenMatt

Sleep.cmdという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 SP2では、sleepコマンドを使用できます。

1
Andres

pingはタイムアウトするまでに約5秒待機します。前述のように1秒ではありません。それは、あなたが に指示しない限り タイムアウトする前に1秒間待つだけだということです。

ping 1.0.0.1 -n 1 -w 1000

一度pingを実行し、応答を待つ時間は1秒(1000ミリ秒)です。その後タイムアウトします。

したがって、20秒の遅延は次のようになります。

ping 1.0.0.1 -n 20 -w 1000

0
LionelGoulet

あなたが選択またはpingを持っているならまあこれはうまくいきます。

@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