2016-12-16 56 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