Cmd プロンプトから - プログラムを終了するタイミングを計るにはどうすればよいでしょうか?

Cmd プロンプトから - プログラムを終了するタイミングを計るにはどうすればよいでしょうか?

コマンド プロンプトを使用して、たとえば 60 秒でプログラムを閉じる方法を見つけたいです。コンピューターの時間指定シャットダウン (shutdown /s /t) や taskill に似ています。

何かアイデアはありますか?これは可能ですか?

答え1

たとえば、60 秒以内にプログラムを閉じるにはどうすればよいでしょうか?

時間遅延を生成するには、pingまたは を使用できます。timeout

  • timeoutWindows XP では使用できません。
  • timeoutカウントダウンを表示します。

ping解決

60 秒後に強制終了するには、notepad次のコマンドを使用します。

ping 127.0.0.1 -n 61 > nul && taskkill /im notepad.exe

注記:

  • s間に 1 秒の遅延があるため、61 回の ping が必要ですping

例:

F:\test>time /t && ping 127.0.0.1 -n 61 > nul && taskkill /im notepad.exe && time /t
17:56
SUCCESS: Sent termination signal to the process "notepad.exe" with PID 8084.
17:57

ループバック アドレスを使用した PING コマンドによっても遅延が生じる可能性があります。連続する各 ping の間には 1 秒の遅延があります。テストでは、PING は Sleep.exe や Timeout.exe よりもプロセッサ時間を消費しないため、他のプロセスをバックグラウンドで実行できます。PING コマンドは Ctrl-C でのみ中断できます。出典: Clay Calvert (usenet 2001)

たとえば、40 秒の遅延の場合:

PING -n 41 127.0.0.1>ヌル

ソースタイムアウト


timeout解決

60 秒後に強制終了するには、notepad次のコマンドを使用します。

 timeout /t 60 && taskkill /im notepad.exe

ノート:

  • timeoutWindows XP では使用できません。
  • timeout実装が不十分です。「タイムアウト 1」を実行すると、「次の秒」まで待機しますが、これは 0.1 秒後に発生する可能性があります。「タイムアウト 1」を数回実行して、遅延の違いを観察してください。5 秒以上の場合は大した問題ではないかもしれませんが、1 秒の遅延ではうまく機能しません。

例:

F:\test>time /t && timeout /t 60 && taskkill /im notepad.exe && time /t
18:07

Waiting for  0 seconds, press a key to continue ...
SUCCESS: Sent termination signal to the process "notepad.exe" with PID 5412.
18:08

参考文献

答え2

使ってみるタスクスケジューラ

  1. 目的のプログラムが起動されたときにイベントが発生するようにイベント ログを構成します。
  2. #1 の特定のイベントがログに記録されたときに実行されるようにスケジュールされたタスクを構成します。スケジュールされたタスクでは、遅延 (この場合は 60 秒) を設定でき、任意のコマンド/スクリプトを起動できます。

答え3

私の例を試してみてください:

choice /t 5 /d a /c ab /n >nul & taskkill /im URprocess.exe

説明: 「choice」は 5 秒待って終了し、その後 taskkill は「URprocess」を閉じます。

答え4

私はWindows 10に付属のscriptrunner.exeを使用しています。パスになかったので、検索する必要がありました。ドキュメントは次の場所にあります。https://ss64.com/nt/scriptrunner.html

私はよく大量の電子書籍を EPUB に変換しますが、途中で変換が止まってしまうことがよくあります。そこで、次の内容のバッチを作成しました。

@echo off
for /F "delims=" %%a in (files.txt) do (
  if not exist "%%a.epub" ScriptRunner.exe -appvscript "c:\Program Files (x86)\calibre2\ebook-convert.exe" "%%a" "%%a.epub" -appvscriptrunnerparameters -timeout=60
  if exist "%%a.epub" del "%%a"
)

Files.txt には、変換が必要なパスを持つすべてのファイルが含まれています。変換には、calibre の ebook-convert.exe を使用します。引数 -timeout=60 は、実行が停止するまでの秒数 (ここでは 60) です。変換が早く準備できれば、次の行が実行されます。

これらはすべてうまく機能します。

関連情報