1

次の操作を実行したい。

  1. 多くの単語で構成される入力ファイルから一度に1単語を読み取ります。
  2. この単語を引数として別のコマンドラインベースのアプリケーションに渡します。
  3. そのアプリケーションを一定の時間、たとえば10秒間実行します。
  4. アプリケーションが10秒経過しても実行中の場合は、アプリケーションの実行を中止して戻り、入力ファイルから次の単語を選択して、手順1〜3を繰り返します。

これが私が書いたものですが、私が望んでいることを正確に達成することはできません。

@echo off
for /f %%i in ('type input.txt') do call:Routine %%i

:Routine
set app="myApp.exe"
set limit=60

%app% %1
goto Delay

:Delay
ping localhost -n %limit% > nul

上記のスクリプトは、myAppの実行が完了した後の遅延を導入します。ただし、myApp.exeを10秒以内で実行したい場合は、実行する場合は、taskkillを使用してアプリケーションを中止し、入力ファイルの次の単語に移動します。

私はオンラインで解決策を探し、これに出くわしました:

http://www.tech-archive.net/Archive/WinXP/microsoft.public.windowsxp.general/2006-04/msg03609.html

クエリに正確に答えることはできませんが、コードに同様のことをさせたいと思います。

ありがとう。

4

1 に答える 1

3

リンクされたコードのロジックに欠陥があるように見えます。3つのダウンロードコマンドを起動するか、最大59秒遅延してすべてのダウンロードコマンドを強制終了しようとしますが、両方を実行することはありません。TASKKILLコマンドの引数が正しくありません-imagenameは/IMパラメーターの後に属します。

あなたのコードでは、TASKKILLコマンドなしでタスクを強制終了することはありません!

ループの終了後にGOTO:EOFまたはEXIT / Bを実行する必要があります。そうしないと、コードが失敗し、CALLを使用せずにサブルーチンが実行されます。しかし、実際にはサブルーチンを使用する必要はまったくありません。

変数を初期化する必要があるのは1回だけです。

IN()句でコマンドを実行する必要はありません。FOR / Fには、テキストファイルを直接読み取ることができるバリエーションがあります。HELP FORコマンドラインから入力し、ドキュメントを注意深く読んでください。

PINGには、各エコー要求の間に約1秒の遅延があります。したがって、11をカウントすると、約10秒の遅延が発生します。

編集-元々、独自のプロセスでアプリを起動するための重要なSTARTコマンドを忘れていました

@echo off
set app="myApp.exe"
set limit=11
for /f %%i in (input.txt) do (
  start "" %app% %%i
  ping localhost -n %limit% > nul
  taskkill /im %app% /f
)
于 2012-07-01T12:13:33.577 に答える