2017-08-09 85 views
1

我有一個批處理文件,我需要運行x分鐘。我知道如何設置計劃任務,但我不確定是否有一個參數可用於利用高級設置「停止現有實例」Schtaks - 命令提示符參數

基本上,我希望能夠運行批處理文件,每分鐘,當它再次運行,如果由於某種奇怪的原因第一個實例沒有完成,我需要它被殺死,並運行新的實例。

現在,我使用的是:

schtasks /create /tn [TASKNAME] /tr C:\[DIR]\au.bat /sc MINUTE /mo 15 /ru "System" 

這是偉大的,但它缺乏這種額外的部分。

我已經知道圖形用戶界面是一個選項,但我使用命令提示符的原因是,這是包含在安裝程序客戶端將用於使他們變得輕鬆,我不希望他們必須採取這是進入GUI進行這一改變的最後一步。

編輯: 結束了這樣的打算:

REM Checks to see if any instances of 'MYTITLE' 
FOR /F "tokens=* USEBACKQ" %%F IN (`tasklist /v /fo csv ^| findstr /i MYTITLE`) DO (
    FOR /F "tokens=2 delims=," %%B IN (%%F) DO (
     taskkill /pid %%B /f 
    ) 
) 

title=MYTITLE 

[BATCH FILE DOES STUFF HERE] 

啓動時,它會查看是否有匹配MYTITLE然後殺死那些任務的任何實例。然後命名它自己並運行批處理。如果它保持打開狀態,它將在下次執行任務時被殺死。

回答

0

您可以將應用程序的STATUS(即{開始,停止,運行,...})及其PID存儲在環境變量中。

例如(環境變量):

MY_APP_STATUS = 1
MY_APP_PID = 1234

爲了得到PID,請參見:
getting process ID of exe running in Bat Filehow to get own process pid from the command prompt in windows

在批處理腳本,如果設置了環境變量,則可以終止正在運行的批處理使用PID

可以使用taskkill命令來做到這一點:

taskkill /pid 1234 /f 

你需要殺死現有運行的批處理後的STATUS標誌復位並更新PID用新的運行實例。

+0

爲什麼不爲我工作的原因是,我沒有使用批處理文件來運行任何應用程序。我正在使用它來檢查Windows服務的當前狀態,然後在它們關閉時啓動它們。該批處理文件將從cmd.exe運行,所以此方法不會有幫助。 – theharlotfelon

+0

這不是你的批次?你不能把這個邏輯加入它嗎? – Azeem

+0

我用你的答案來解決我的問題。雖然最終我沒有得到你的解決方案在我的情況下工作,但我想出了一些基於這裏所說的從兔子洞開始的東西。請參閱上面的答案。 – theharlotfelon

1

實際上,我的問題的快速和簡單的答案是簡單地在GUI中的任務計劃程序中設置任務,並且在設置所有參數時,只導出xml文件。一旦完成,您只需使用/xml選項創建。

schtasks /create /tn [TASKNAME] /XML C:\[DIR]\schedule.xml