用于获取磁盘空间详细信息的Windows批处理脚


0

我需要获取磁盘空间详细信息的邮件警报。我在论坛中找到了这个脚本。当我在命令提示符下运行此脚本时,它会生成如下所述的输出。但是当我通过将其保存为批处理文件来运行它时,它不起作用。

任何人都可以帮助我如何将其作为批处理文件或任何其他方法来使用批处理文件获取磁盘空间详细信息,以便我可以在任务计划程序中安排。

脚本

(for / f“tokens = 1-3”%a in('WMIC LOGICALDISK GET FreeSpace ^,Name ^,Size ^ | FINDSTR / I / V“Name”')do @echo wsh.echo“%b”^& “free =”^&FormatNumber ^(cdbl ^(%a ^)/ 1024/1024 / 2424,2 ^)^&“GB”^&“size =”^&FormatNumber ^(cdbl ^(%c ^)/ 1024/1024/1024,2 ^)^&“GB”>%temp%\ tmp.vbs&@ if not“%c”==“”@echo(&@cscript // nologo%temp%\ tmp.vbs &del%temp%\ tmp.vbs)> E:\ monitoring_scripts \ log \ Disk_status.txt

产量

C:free = 79,11 GiB size = 111,45 GiB
D:free = 929,47 GiB size = 931,51 GiB

Answers:


1

%表示循环控制变量的符号加倍:%ato %%a%bto %%b等等:

@ECHO OFF
SETLOCAL enableextensions
(for /f "tokens=1-3" %%a in ('
  WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"
  ') do (
    echo wsh.echo "%%b" ^& " free=" ^& FormatNumber^(cdbl^(%%a^)/1024/1024/1024, 2^)^& " GB"^& " size=" ^& FormatNumber^(cdbl^(%%c^)/1024/1024/1024, 2^)^& " GB" > "%temp%\tmp.vbs"
    if not "%%c"=="" (
      echo( 
      cscript //nologo "%temp%\tmp.vbs"
      del "%temp%\tmp.vbs"
    )
  )
) > E:\monitoring_scripts\log\Disk_status.txt

或者,使用较少的磁盘写入%temp%文件夹并使用唯一的cscript调用:

@ECHO OFF
SETLOCAL enableextensions
(for /f "tokens=1-3" %%a in ('
  WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"
  ') do (
    if not "%%c"=="" (
      echo wsh.echo vbNewLine ^& "%%b" ^& " free=" ^& FormatNumber^(cdbl^(%%a^)/1024/1024/1024, 2^)^& " GB"^& " size=" ^& FormatNumber^(cdbl^(%%c^)/1024/1024/1024, 2^)^& " GB"
    )
  )
) > "%temp%\tmp.vbs"
cscript //nologo "%temp%\tmp.vbs" > E:\monitoring_scripts\log\Disk_status.txt
del "%temp%\tmp.vbs"

资源(进一步阅读):Windows CMD命令行的AZ索引


哇 !!太棒了...非常感谢Josef。它很棒。
Dhanu DBA 2015年

我需要通过条件触发警报,如果磁盘被填满超过90%,那么我必须做一个警报邮件。我可以使用Mailing进程。请建议如何将磁盘上的if循环填充超过90%。
Dhanu DBA 2015年

@DhanuDBA ^& " GB percent=" ^& Round^(100 *cdbl^(%%a^) / cdbl^(%%c^), 0^)而不是last ^& " GB",然后使用解析输出for /F "usebackq tokens=3 delims==" %%G in ("Disk_status.txt") do if %%G LEQ 10 echo trigger alert(抱歉,未测试...)。更改为tokens=1,?delims=:=获取磁盘字母(使用适当的数字而不是?)。
JosefZ 2015年

嗨约瑟夫,我试过这样的。我在写它。(for / F“usebackq tokens = 3 delims ==”%% G in('WMIC LOGICALDISK GET FreeSpace ^,Name ^,Size ^ | FINDSTR / I / V“Name”')do(echo wsh.echo“%% b“^&”free =“^&FormatNumber ^(cdbl ^(%% a ^)/ 1024/1024 / 2424,2 ^)^&”GB“^&”size =“^&FormatNumber ^(cdbl ^( %% c ^)/ 1024/1024 / 2424,2 ^)^&“GB percent =”^&Round ^(100 * cdbl ^(%% a ^)/ cdbl ^(%% c ^),0 ^) >“%temp%\ tmp.vbs”如果%% G LEQ 10(echo(cscript // nologo“%temp%\ tmp.vbs”del“%temp%\ tmp.vbs”)))> D:\ moitor_scripts \ log \ Disk_space.txt
Dhanu DBA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.