2016-12-16 21 views
-4

我一直在嘗試執行批處理文件。我正在嘗試的邏輯是,如果服務的內存(工作集私有)超過特定值,服務應該重新啓動。執行批處理文件時出現無效的動詞錯誤

不過,我收到提示爲無效的動詞,當我嘗試執行此bat文件:

@Echo OFF 

SET "SERVICE=Themes" 
SET /A "MAXUSAGE=401400" 
SET /A "INTERVAL=5" 

:LOOP 
For /F %%P in ('wmic path Win32_PerfFormattedData_PerfProc_Process where  Name="cmd" get WorkingSetPrivate /value ^| FINDSTR "[0-9]"') do (
IF %%P GTR %MAXUSAGE% (
    Echo [%TIME:~0,8%] CPU Usage: %%P%% Reached the limit: %MAXUSAGE%%% 
    Echo Restarting %SERVICE% ... 
    SC STOP "%SERVICE%" 1>NUL 
    SC START "%SERVICE%" 1>NUL 
    Echo Service restarted. 
) ELSE (
    Echo [%TIME:~0,8%] CPU Usage: %%P%% 
) 
) 
Ping -n %INTERVAL% Localhost >NUL 
GOTO :LOOP  ` 

我是新來的這種類型的編碼。任何指導將不勝感激。

+5

沒有理由喊我們。我們都讀得很好,所以你不需要提出你的問題。在全部大寫(特別是標題)中輸入您的問題不會讓您更早得到答案,這會讓您的問題更難以閱讀,而且很粗魯和煩人。如果您瀏覽主要問題頁面,並計算出所有CAPS中出現問題標題的數量,您是否會看到除您之外的其他許多問題?請客氣,不要在美國停留。謝謝。 –

+0

對不起 我會記住這件事在未來 –

+0

心目中,我將能夠進一步幫助你,如果你要提供你的實際任務的正確解釋,你在這裏是一個複製以前的答案已經被部分改變。除了報告錯誤之外,您的代碼還有其他問題;他們也需要修復。 – Compo

回答

0

這是一個基本的命令行應指示您修復您的問題:

For /F "Skip=1 UseBackQ" %A In (`wmic path Win32_PerfFormattedData 
_PerfProc_Process where "name='cmd'" get workingsetprivate`) Do @For %B In (%A) Do @Echo([%B] 

有usebackq是您的線索......

+0

我試圖取代了線 重新啓動該服務對於/ F「Skip = 1 UseBackQ」%% P In('wmic path Win32_PerfFormattedData _PerfProc_Process where'name ='cmd'「get workingsetprivate') 但我得到的錯誤與無效動詞 –

+0

UseBackQ表示Use Back Quotes,I使用它們,你沒有。請檢查我的答案,然後像命令窗口一樣運行該行。當你這樣做時,將百分比加倍並將其寫入批處理文件中,以'@Echo Off'開始並以「Pause」結束。當你看到它的工作,做出你的改變。 – Compo

相關問題