2012-07-01 193 views
1

我想執行下列操作。運行DOS命令一段時間

  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

雖然它並沒有回答我的詢問究竟,我想提出我的代碼做同樣的事情。

謝謝。

回答

3

鏈接代碼中的邏輯看起來有缺陷:它會啓動3個下載命令,或者延遲〜59秒,並嘗試終止所有下載命令,但它從來都不會執行這兩個命令。 TASKKILL命令參數不正確 - imagename屬於/ IM參數之後。

在你的代碼中,你不會在沒有TASKKILL命令的情況下殺死你的任務!

循環結束後,您必須使用GOTO:EOF或EXIT/B,否則代碼將落入並執行子程序而不使用CALL。但是根本不需要使用子程序。

你只需要初始化你的變量一次。

不需要在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 
) 
+0

在我而言這是行不通的。 ping延遲和taskkill僅在應用程序執行完成後才執行。只要應用程序仍在運行,Ping延遲就不會開始執行。 –

+0

@NeonFlash - 哎呀,當然不起作用。我忘了START命令。我在我的答案中編輯了代碼。 – dbenham