处理文件夹空格的情况
为了规避文件夹空格的问题,我们采用软连接的方式:
/j 和/d 当使用绝对路径时,没有不同。
mklink /J C:\mssqlsize\data2 “D:\SysDB”
mklink /J C:\mssqlsize\data3 “D:\PlatDataBase”
处理脚本
在c:\mssqlsize下新建一个dirsize.bat
@echo off
IF [%1]==[] GOTO USAGE
if NOT exist "%1" (ECHO "%1" path not exist & GOTO END)
:DIR_PATH
dir /ad /b %1 > 1.txt
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do (
rem echo
dir /s "%1\%%i" |findstr 个文件 > 2.txt || echo. > 2.txt
rem for /f "eol=0 tokens=1,3 " %%j in (2.txt) do set ll=%%k 字节 %1\%%i %%j 个文件
for /f "eol=0 tokens=1,3 " %%j in (2.txt) do set ll=%%k & set ll=!ll:~0,-9! M %1\%%i %%j 个文件
echo !ll!
rem echo.
)
set total=
Endlocal
del 1.txt 2.txt
GOTO END
:USAGE
echo Usage: %0 dir_path
GOTO END
:END
rem pause
此脚本可以得到文件夹的大小,但是是多行数据,包含字符
c:\mssqlsize>dirsize.bat c:\mssqlsize
10,941 M c:\mssqlsize\data1 12 个文件
503 M c:\mssqlsize\data2 6 个文件
加工数据
再新建一个 mssqlsize.bat
@echo off
set n=0
rem tokens取第一列,delims是以空格为分隔符;
for /F "tokens=1 delims= " %%i in ('C:\mssqlsize\dirsize.bat C:\mssqlsize') do (
rem 判断%%i是否包含,(逗号)
echo %%i | findstr , >null && (
rem 如果包含则...
echo %%i > tmp.txt
rem /p表示从外部输入一个值
set /p num=<tmp.txt
rem 表示把参数num中的,替换成空
echo %num:,=% > tmp2.txt
set /p num2=<tmp2.txt
set /a n+=%num2% > C:\mssqlsize\3.txt
rem 如果不包含则... ||相当于else
) || (
rem 叠加
set /a n+=%%i > C:\mssqlsize\3.txt
))
rem 清理临时文件
del 1.txt 2.txt 3.txt tmp.txt tmp2.txt null
rem 单位是M
echo %n%
配置zabbix
在zabbix的配置文件里面添加:
UserParameter=file.size,C:\mssqlsize\mssqlsize.bat
之后在web页面添加监控项就好了。