web-dev-qa-db-ja.com

Windowsバッチ:スリープ

数秒待つWindowsバッチスクリプトを取得するにはどうすればよいですか?

sleepおよびwaitは機能していないようです(認識されないコマンド)。

115
Claudiu

あなたが試すことができます

ping -n XXX 127.0.0.1 >nul

ここで、XXXは待機する秒数に1を加えたものです。

171
tenfour

これらのコマンドがなぜ機能しないのかわかりませんが、 timeout を試すこともできます

timeout <delay in seconds>
152
Jaime Soto
timeout /t 10 /nobreak > NUL

/tは、待機する時間を秒単位で指定します

/nobreakは、キーを押してもタイムアウトを中断しません(CTRL-Cを除く)

> NULは、コマンドの出力を抑制します

146
lukuluku

10秒待つには:

choice /T 10 /C X /D X /N
13
GolezTrol

Microsoftには、直接呼び出すことができるスリープ機能があります。

    Usage:  sleep      time-to-sleep-in-seconds
            sleep [-m] time-to-sleep-in-milliseconds
            sleep [-c] commited-memory ratio (1%-100%)

sleep 1と言うだけで、たとえば、バッチスクリプトで1秒間スリープすることができます。

IMO Pingは、このユースケースのちょっとしたハックです。

13
emmax

純粋なcmd.exeスクリプトの場合、現在の時間を数百秒単位で返すこのコードを使用できます。

:gettime
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

その後、このような待機ループで使用できます。

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

そして、すべてのピースをまとめる:

@echo off
setlocal enableextensions enabledelayedexpansion

call :gettime t1
echo %t1%
call :wait %1
call :gettime t2
echo %t2%
set /A tt = (t2-t1)/100
echo %tt%
goto :eof

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

:gettime 
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

ここで使用されるコマンドの詳細については、HELP SETおよびHELP CALL情報を確認してください。

6
PA.

Windows 2003 Resource Kit にはsleepバッチファイルがあります。 PowerShell に移動した場合、次を使用できます。

Start-Sleep -s <time to sleep>

またはそのようなもの。

4
wkl

JScript に依存しています。次のようなJScriptファイルがあります。

// This is sleep.js
WScript.Sleep( WScript.Arguments( 0 ) );

そして、バッチファイル内で CScript (通常は%SystemRoot%\system32\cscript.exe)で実行します

rem This is the calling inside a BAT file to wait for 5 seconds
cscript /nologo sleep.js 5000
4

ええと、Windowsはうーん...面白いです。これは動作します:

choice /T 1 /d y > NUL

choiceは、yesまたはnoを尋ねるプロンプトを表示します。 /d yは、yesを選択させます。 /t 1は、入力する前に1秒間待機させます。 > NUL出力をスカッシュします。

3
Claudiu

Win32Sleep API function と呼ばれる独自のスリープを作成しました。

2
David Heffernan

RJLsoftware には DelayExec.exe という小さなユーティリティがあります。これにより、バッチおよびWindowsレジストリでプログラムの遅延開始を実行できます(... Windows /.../ Runレジストリで最も便利です)。

使用例:

delayexec "C:\WINDOWS\system32\notepad.exe" 10

またはスリープコマンドとして:

delayexec "nothing" 10
1
Thomasso

個人的には Perl one-liner を使用しています:

Perl -e "sleep 10;"

10秒間待機します。 gitインストールの一部として、開発マシンにすでにPerlがインストールされている可能性があります。そうでない場合は、たとえば ActiveState または Strawberry からインストールする必要がありますが、とにかくインストールするものの1つです。

または、 GnuWin32 からスリープコマンドをインストールできます。

1
Rup