BATCH警告用户低系统内存或磁盘空间

时间:2013-11-25 15:57:11

标签: windows batch-file memory alert

尝试了以下内容的变体,并附加了更多代码,这里有什么问题?谢谢!

@echo off
goto checkmemorystatus
:checkmemorystatus
for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do ( 

set m=%%p
if %m% LSS <threshold> (start echo FREE RAM ALERT: %m% & PING 1.1.1.1 -n 1 -w 60000 >NUL)
  goto checkmemorystatus
)

2 个答案:

答案 0 :(得分:1)

无需延迟扩展(因为不需要额外的变量):

@echo off
:checkmemorystatus
PING localhost -n 2 -w 60000 >NUL
for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do ( 
   if %%p leq 700000 ( echo FREE RAM ALERT: %%p ) else (echo FREE RAM ok   : %%p)
   goto checkmemorystatus
)

(代码基本上来自mihai_mandis) wmic为你提供了比你想要的更多的线条。您已使用skip忽略了第一行。上面的代码在一次运行后中断了for循环并忽略了以下行。 (我为测试目的添加了“Free RAM ok” - 你可能想删除它)

答案 1 :(得分:0)

  1. 在脚本开头设置延迟扩展:

    setlocal EnableDelayedExpansion

  2. 这将允许您以格式!var_name!

    格式访问for循环中的变量

    2.不要在块内使用goto语句。这将导致休息。

       @echo off
        setlocal EnableDelayedExpansion
        :checkmemorystatus
    
        for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do ( 
           set mm=%%p
           if !mm! LSS <threshold> (
              start echo FREE RAM ALERT: !mm!
              PING localhost -n 1 -w 60000 >NUL
           )
        )
    goto :checkmemorystatus