MENU

バッチファイルで処理を一定時間停止する方法

はじめに

バッチファイルを使用してファイル操作を自動化する際、処理を一定時間(指定した時間)停止させたい場面があります。たとえば、同名のファイルが存在する場合に新たなファイルを作成する際、まず既存のファイルを削除する必要があります。その際、削除が正しく完了しているかどうかを確認したい場合があります。最近、削除後、同名のファイルをすぐに再作成するバッチファイルを作成した際、処理速度が非常に速く、削除が完了したかを確認する余裕がありませんでした。このような状況では、削除後に数秒から数十秒間の停止処理を追加することで、確認時間を確保できます。本記事では、その際に利用した方法を含めて、バッチファイルで処理を一定時間停止する方法を2つ紹介します。

1. Timeoutコマンドを使った方法

1.1 Timeoutコマンドの基本構文

バッチファイルで処理を停止する際、標準的な方法としてtimeoutコマンドがあります。以下が基本的な構文です

@echo off
timeout /t 5 /nobreak
  • /t停止時間(秒)を指定します。
  • /nobreak を付けることで、ユーザーのキー入力による中断を防ぎます。この指定がないとユーザーが何かしらキー入力を行った際に処理が中断されます。

実行例
次の例では、60秒間停止した後に処理を再開します

@echo off
echo 処理を開始します…
timeout /t 60 /nobreak
echo 処理が再開されました!

1.2 Timeoutコマンドの注意点

ジョブ管理などを行うWebサービスからバッチファイルを実行すると、ユーザー入力の操作が原因でWebサービス側のエラーが発生する場合があります。そのような場合には、次で紹介するPowerShellStart-Sleepコマンドを使用するのがおすすめです。実際、私が試した際もジョブ管理で使用しているWebサービスの仕様と思われるエラーに直面し、Start-Sleepを活用することで解決しました。特に制限がない環境では、timeoutコマンドがシンプルで使いやすい方法です。

2. PowerShellのStart-Sleepを使った方法

2.1 Start-Sleepコマンドの基本構文

PowerShellStart-Sleepコマンドは、指定した秒数だけ処理を停止します。バッチファイルからも呼び出せます。基本構文は以下の通りです

@echo off
powershell Start-Sleep -Seconds 5

Start-Sleepには、短縮形のエイリアスsleepが用意されています

@echo off
powershell sleep 5

実行例
以下は5秒間停止した後に処理を再開する例です

@echo off
echo 処理を開始します…
powershell Start-Sleep -Seconds 5
echo 処理が再開されました!
@echo off
echo 処理を開始します…
powershell sleep 5
echo 処理が再開されました!

2.2 Start-Sleepコマンドの注意点

Start-Sleeptimeoutで問題が発生する場合に試してみてください。このコマンドを使用するには、PowerShellのインストールが必要である点に注意してください。また、PowerShellを呼び出しているので、わずかではありますが処理時間にズレが発生する可能性があります。正確なタイミングを重視する処理では慎重に利用可否を検討してください。

3. サンプルコード

最後に、PowerShellStart-Sleep(sleep)を使って、ファイル削除後に一定時間停止するバッチファイルのサンプルコードを紹介します。

@echo off
:: バッチ処理の開始
echo 処理を開始します…

:: 削除対象のファイル名を指定(例: sample.txt)
set targetFile=sample.txt

:: ファイルの存在確認
if exist %targetFile% (
    echo %targetFile% を削除しています…
    del %targetFile%  :: ファイルを削除
) else (
    echo %targetFile% は存在しません。
)

:: 削除後に一定時間停止
echo 削除完了。30秒間待機します…
powershell sleep 30

:: ファイルを再作成
echo %targetFile% を再作成します…
type nul > %targetFile%

:: 処理完了
echo %targetFile% の再作成が完了しました!
pause

ポイント解説

  1. 環境変数targetFile
    操作対象のファイル名をset環境変数に設定しています。

  2. 削除確認
    if existでファイルの有無をチェックし、存在する場合のみ削除します。

  3. 一定時間停止
    powershell sleep で、30秒間停止します。 この間にファイルが削除されているか確認することができます。

  4. ファイル再作成
    type nul > %targetFile% で空のファイルを作成します。

  5. ユーザーへの出力
    各処理の進捗を表示することで、処理状況が分かりやすいようにしています。

まとめ

バッチファイルで処理を停止させる方法として、timeoutコマンドとPowerShellStart-Sleep(sleep)を紹介しました。環境や要件に応じて使い分けることで、効率的かつ安定したバッチ処理を実現できます。どちらも基本的なコマンドであり、初心者にも取り組みやすい方法です。

こちらもおすすめの記事です。ぜひチェックしてみてください!

■バッチに詳しくなりたい方におすすめの記事■