はじめに
バッチファイルを使用してファイル操作を自動化する際、処理を一定時間(指定した時間)停止させたい場面があります。たとえば、同名のファイルが存在する場合に新たなファイルを作成する際、まず既存のファイルを削除する必要があります。その際、削除が正しく完了しているかどうかを確認したい場合があります。最近、削除後、同名のファイルをすぐに再作成するバッチファイルを作成した際、処理速度が非常に速く、削除が完了したかを確認する余裕がありませんでした。このような状況では、削除後に数秒から数十秒間の停止処理を追加することで、確認時間を確保できます。本記事では、その際に利用した方法を含めて、バッチファイルで処理を一定時間停止する方法を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サービス側のエラーが発生する場合があります。そのような場合には、次で紹介するPowerShellのStart-Sleep
コマンドを使用するのがおすすめです。実際、私が試した際もジョブ管理で使用しているWebサービスの仕様と思われるエラーに直面し、Start-Sleep
を活用することで解決しました。特に制限がない環境では、timeout
コマンドがシンプルで使いやすい方法です。
2. PowerShellのStart-Sleepを使った方法
2.1 Start-Sleepコマンドの基本構文
PowerShellのStart-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-Sleep
はtimeout
で問題が発生する場合に試してみてください。このコマンドを使用するには、PowerShellのインストールが必要である点に注意してください。また、PowerShellを呼び出しているので、わずかではありますが処理時間にズレが発生する可能性があります。正確なタイミングを重視する処理では慎重に利用可否を検討してください。
3. サンプルコード
最後に、PowerShellのStart-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
ポイント解説
削除確認
if exist
でファイルの有無をチェックし、存在する場合のみ削除します。一定時間停止
powershell sleep で、30秒間停止します。 この間にファイルが削除されているか確認することができます。ファイル再作成
type nul > %targetFile% で空のファイルを作成します。ユーザーへの出力
各処理の進捗を表示することで、処理状況が分かりやすいようにしています。
まとめ
バッチファイルで処理を停止させる方法として、timeout
コマンドとPowerShellのStart-Sleep(sleep)
を紹介しました。環境や要件に応じて使い分けることで、効率的かつ安定したバッチ処理を実現できます。どちらも基本的なコマンドであり、初心者にも取り組みやすい方法です。
こちらもおすすめの記事です。ぜひチェックしてみてください!