ホーム > IT > DOS > バッチファイル 途中で実行を一時停止する (timeout)
目次 | 元のページ 前のページ | 次のページ サイトマップ | ページEND

バッチファイル 途中で実行を一時停止する (timeout)


バッチファイル 途中で実行を一時停止する (timeout)



バッチファイルh、一連の DOSコマンドを記述しておけば、自動的に上から順位に実行してくれるので便利なものですが、実行にあたり、前の DOSコマンドの実行後少し時間をおきたい場合がでてきます

UNIX系の OSでは、「sleep」というコマンドが使用でき、秒単位で実行を一時停止することができます(例えば、スクリプトに 「sleep 10」 と記述しておくと、そこで実行が 10秒間一時停止します)


MS-DOS OSには、それに相当するコマンドが提供されていなかったため、以前は、pingの送信間隔が 1秒であることを利用して、「ping localhost -n 10 > nul」等を記述することによって、「sleep」コマンドの代用、一時停止を行っていました

Windows Vista/Windows Server 2003以降の Windows OSでは、「timeout.exe」というコマンドが標準提供されるようになりましたので、現在では、バッチファイルの実行を途中で一時停止したい場合、「timeout.exe」が利用できます


以下、両方の記述方法をご紹介しておきます



timeout.exe を利用して 一時停止する



バッチファイル名 (例)
Wait.cmd
バッチファイル内の記述
@echo off
timeout /T %1
バッチファイル内の記述説明
記述された箇所で、「%1」 秒間、バッチファイル実行が一時停止します
「@echo off」 は、コマンド エコーの抑止(表示しない)設定
「%1」 には、他のバッチファイルから呼び出された際のパラメータが引き継がれます
直接指定する際は、「1」とか「5」とかの秒数を記述します
timeout コマンドの説明
C:\>timeout /?

TIMEOUT [/T] タイムアウト [/NOBREAK]

説明:
このユーティリティでは、タイムアウトのパラメーターを指定して、一定の時間 (秒)が経過するまで、またはユーザーが任意のキーを押すまで、プログラムを待機させることができます。
キー入力を無視するためのパラメーターを指定することもできます。

パラメーター一覧:
/T タイムアウト 待機する時間 (秒) を指定します。
有効な範囲は -1 から 99999 秒までです。

/NOBREAK キーが押されても無視し、指定時間待ちます。

/? このヘルプを表示します。

注意: タイムアウト値 -1 は、キーが押されるまで無限に待機することを意味します。

例:
TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1



ping.exe を利用して 一時停止する



バッチファイル名 (例)
Wait.cmd
バッチファイル内の記述
@echo off
ping localhost -n %1 > nul
バッチファイル内の記述説明
記述された箇所で、「%1」 秒間、バッチファイル実行が一時停止します
「@echo off」 は、コマンド エコーの抑止(表示しない)設定
「%1」 には、他のバッチファイルから呼び出された際のパラメータが引き継がれます
直接指定する際は、「1」とか「5」とかの秒数を記述します
「localhost」 は、全てのPC(ネットワークカード)に定義されている仮想ホスト(自分自身を指します)
「-n」 は、「ping」 の実行回数 (1秒間隔で実行されます)
「 > nul」 は、「ping」 実行結果表示の抑止(表示しない)設定
ping コマンドの説明
C:\>ping /?

使用法: ping [-t] [-a] [-n 要求数] [-l サイズ] [-f] [-i TTL] [-v TOS]
[-r ホップ数] [-s ホップ数] [[-j ホスト一覧] | [-k ホスト一覧]]
[-w タイムアウト] [-R] [-S ソースアドレス] [-4] [-6] ターゲット名

オプション:
-t 中断されるまで、指定されたホストを Ping します。
統計を表示して続行するには、Ctrl+Break を押してください。
停止するには、Ctrl+C を押してください。
-a アドレスをホスト名に解決します。
-n 要求数 送信するエコー要求の数です。
-l サイズ 送信バッファーのサイズです。
-f パケット内の Don't Fragment フラグを設定します (IPv4 のみ)。
-i TTL Time To Live です。
-v TOS Type Of Service (IPv4 のみ。この設定はもう使用されておらず、IP ヘッダー内のサービス フィールドの種類に影響しません)。
-r ホップ数 指定したホップ数のルートを記録します (IPv4 のみ)。
-s ホップ数 指定したホップ数のタイムスタンプを表示します (IPv4 のみ)。
-j ホスト一覧 一覧で指定された緩やかなソース ルートを使用します
(IPv4 のみ)。
-k ホスト一覧 一覧で指定された厳密なソース ルートを使用します
(IPv4 のみ)。
-w タイムアウト
応答を待つタイムアウトの時間 (ミリ秒) です。
-R ルーティング ヘッダーを使用して逆ルートもテストします
(IPv6 のみ)。
-S ソースアドレス
使用するソース アドレスです。
-4 IPv4 の使用を強制します。
-6 IPv6 の使用を強制します。



Wait.cmd の使用法



バッチファイル内の記述
@echo off
CMD /C D:\Data\SYS\CMD\Wait.cmd 5
バッチファイル内の記述説明
記述した箇所で、「5」 秒間、バッチファイル実行を一時停止します
「@echo off」 は、コマンド エコーの抑止(表示しない)設定
「CMD /C 」 は、「Wait.cmd」実行後、その直後の行からバッチ処理を再開する指定 (この指定をしないと後続の処理は実行されません)
「D:\Data\SYS\CMD\」 は、「Wait.cmd」 を格納しているファルダのパス指定 (任意の場所)
cmd コマンドの説明
F:\>cmd /?

Windows コマンド インタープリターの新しいインスタンスを開始します。

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]

[[/S] [/C | /K] 文字列]

/C "文字列" に指定されたコマンドを実行した後、終了します。
/K "文字列" に指定されたコマンドを実行しますが、終了しません。
/S /C または /K の後の文字列の扱いを変更します
(以下の説明を参照してください)。
/Q エコーをオフにします。
/D レジストリからの AutoRun コマンドの実行を無効にします
(下記を参照してください)。
/A 内部コマンドの出力結果を ANSI でパイプまたはファイルに出力します。
/U 内部コマンドの出力結果を Unicode でパイプまたはファイルに出力します。
/T:fg 前景色および背景色を設定します (詳細は COLOR /? を参照してください)。
/E:ON コマンド拡張機能を有効にします (以下の説明を参照してください)。
/E:OFF コマンド拡張機能を無効にします (以下の説明を参照してください)。
/F:ON ファイル名およびディレクトリ名補完文字を有効にします (以下の説明を参照してください)。
/F:OFF ファイルおよびディレクトリ名補完文字を無効にします (以下の説明を参照してください)。
/V:ON 区切り文字として ! を使って遅延環境変数の展開を有効にします。
たとえば、/V:ON とすると、!var! は、実行時に変数 var を展開します。
var 構文は、FOR ループ中とは違い、入力時に変数を展開します。
/V:OFF 遅延環境展開を無効にします。

コマンド セパレーター '&&' で区切られた複数のコマンドが引用符で囲まれている場合は、"文字列" として指定されます。また互換性の理由から /X と /E:ON、/Y と/E:OFF、および /R と /C は同じです。その他のスイッチは無視されます。

/C または /K が指定されている場合、スイッチの後の残りのコマンド ラインがコマンド ラインとして処理されます。次のルールが引用符 (") の処理に使われます:

1. 次のすべての条件に一致する場合、コマンド ラインの引用符が有効になります:

- /S スイッチがない
- 引用符が 1 組ある
- 引用符の中に特殊文字がない
(特殊文字は &<>()@^| です)
- 引用符の中に 1 つ以上のスペースがある
- 引用符の中の文字列が、実行可能ファイルの名前である

2. 最初の文字が引用符であるにも関わらず上の条件に一致しない場合は、最初の引用符とコマンド ラインの最後の引用符が削除され、最後の引用符の後のテキストが有効になります。

コマンド ラインで /D が指定されなかった場合は、CMD.EXE の開始時に次の REG_SZ または REG_EXPAND_SZ レジストリ変数が検索されます。次のレジストリ変数の両方またはどちらかが存在する場合、それらを最初に実行します。

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun

および/または

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

既定では、コマンド拡張機能は有効です。拡張機能を無効にして CMD.EXE を起動するには、/E:OFF スイッチを使用します。コンピューターまたはユーザー ログオン セッションで起動される CMD.EXE コマンドすべてに対して拡張機能を有効または無効にするには、REGEDIT.EXE を使ってレジストリにある次の REG_DWORD 値を設定します。コンピューターに対しては、

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ログオン セッションに対しては、

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ユーザー固有の設定は、コンピューターの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。

バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS 引数は /E:ON または /E:OFF スイッチよりも優先されます。詳細については SETLOCAL /? を参照してください。

コマンド拡張機能には、次のコマンドに対する変更または追加が含まれています。

DEL または ERASE / COLOR / CD または CHDIR / MD または MKDIR / PROMPT /
PUSHD / POPD / SET / SETLOCAL / ENDLOCAL / IF / FOR / CALL / SHIFT / GOTO / START (外部コマンドの起動の変更を含みます) / ASSOC / FTYPE

詳細は、コマンド名の後に「/?」と入力すると表示されるヘルプを参照してください。
レジストリにある次の REG_DWORD 値を設定します。コンピューターに対しては、

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ログオン セッションに対しては、

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ユーザー固有の設定は、コンピューターの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。

バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS 引数は /E:ON または /E:OFF スイッチよりも優先されます。詳細については SETLOCAL /? を参照してください。

コマンド拡張機能には、次のコマンドに対する変更または追加が含まれています。

DEL または ERASE / COLOR / CD または CHDIR / MD または MKDIR / PROMPT /
PUSHD / POPD / SET / SETLOCAL / ENDLOCAL / IF / FOR / CALL / SHIFT / GOTO / START (外部コマンドの起動の変更を含みます) / ASSOC / FTYPE

詳細は、コマンド名の後に「/?」と入力すると表示されるヘルプを参照してください。

既定では、遅延環境変数の展開は有効ではありません。遅延環境変数の展開を有効または無効にして CMD.EXE を起動するには、/V:ON または /V:OFF スイッチを使います。
コンピューターまたはログオン セッションで起動される CMD.EXE コマンドすべてに対して遅延の展開を有効または無効にするには、REGEDIT.EXE を使ってレジストリにある次の REG_DWORD 値を設定します。コンピューターに対しては、

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ユーザー ログオン セッションに対しては、

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ユーザー固有の設定は、コンピューターの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。

バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS 引数は /V:ON または /V:OFF スイッチよりも優先されます。
詳細については SETLOCAL /? を参照してください。

遅延環境変数の展開が有効になっている場合、感嘆符を使うと実行時に環境変数の値を置き換えることができます。

CMD.EXE の特定の起動のファイル名補完機能を有効または無効にするには、/F:ON または /F:OFF スイッチを使用します。コンピューターとユーザー ログオン セッションまたはそのいずれかで起動される CMD.EXE コマンドすべてに対して補完機能を有効または無効にするには、REGEDIT.EXE を使ってレジストリにある次の REG_DWORD 値を設定します。コンピューターに対しては、

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar

に特定の機能に使う 16 進の制御文字を設定します (例 0x4 は Ctrl-D、0x6 は Ctrl-F)。ユーザー ログオン セッションに対しては、

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar

に特定の機能に使う 16 進の制御文字を指定します (例: 0x4 は Ctrl-D、0x6 は Ctrl-F)。
ユーザー固有の設定は、コンピューターの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。

/F:ON スイッチで補完機能を有効にした場合、2 つの制御文字 (Ctrl-D はディレクトリ名補完機能、Ctrl-F はファイル名補完機能) が使用されます。
レジストリで特定の補完文字を無効にするには、制御文字として有効でないスペース (0x20) の値を使用します。

2 つの制御文字のどちらかを入力すると、補完機能が起動されます。
パスが存在しない場合、プログラムはカーソルの左側のパス文字列にワイルド カード文字を付加し、一致するパスの一覧を作成します。その後一致する最初のパスを表示します。パスが一致しない場合、音を鳴らします。同じ制御文字を押し続けると一致するパスの一覧を順に表示します。Shift キーを押しながら制御文字を押すと一覧を逆回り表示します。行を編集して制御文字をもう一度押すと、保存
されていた一致したパスの一覧は破棄され、新しい一覧が作成されます。
ファイル名補完機能とディレクトリ名補完機能を切り替えたときも同様です。
2 つの制御文字の違いは、ディレクトリ補完文字がディレクトリ名だけを照合するのに対し、ファイル名補完文字はファイルとディレクトリ名の両方を照合する点です。
ファイル補完機能が内部ディレクトリ コマンド (CD、MD または RD) に使用された場合、ディレクトリ補完機能と見なされます。

一致するパスの前後に引用符を付けると、補完機能コードでスペースまたは他の特別な文字を含むファイル名が使用できるようになります。また、行の前に戻って補完機能を起動した場合、補完機能が呼び出された時点でカーソルの右側にあったテキストは破棄されます。

引用符が必要な特別な文字は次のとおりです:
<スペース>
&()[]{}^=;!'+,`~

目次 | 元のページ 前のページ | 次のページ サイトマップ | ページTOP
ホーム > IT > DOS > バッチファイル 途中で実行を一時停止する (timeout)
   

© 2014 abhp.net All Rights Reserved.

参考情報


Windowsのコマンドプロンプトでsleepする3つの方法 -- ぺけみさお
Tech TIPS:Windowsのtimeout/sleepコマンドで実行を一時停止する - @IT

コンテンツ一覧

ページTOP
ページTOP
ページTOP
ページTOP