cmd获取当前cpu占用率 内存占用率和 D盘的磁盘空间
cmd获取当前cpu使用率 内存使用率和 D盘的磁盘空间
获取CPU占用率、内存占用率和D盘磁盘空间
可以使用以下命令组合获取CPU占用率、内存占用率和D盘磁盘空间
获取内存信息 CPU 信息 内存使用情况 总内存 可用内存 c盘可用空间
1. CPU占用率
wmic cpu get loadpercentage
2. 内存占用率
wmic OS get FreePhysicalMemory,TotalVisibleMemorySize /Value
计算方式:(1 - FreePhysicalMemory/TotalVisibleMemorySize) * 100%
3. D盘磁盘空间
wmic logicaldisk where "DeviceID='D:'" get Size,FreeSpace
4. 一键获取所有信息的批处理脚本
创建 system_info.bat 文件,内容如下:
@echo off
chcp 65001 >nul 2>&1
echo ======================================
echo 系统资源监控(稳定版)
echo ======================================
:: 1. 获取CPU占用率(改用wmic,兼容所有系统)
echo.
echo --- CPU 信息 ---
for /f "skip=1 tokens=2 delims==" %%a in ('wmic cpu get loadpercentage /value 2^>nul') do (
set "cpu_usage=%%a"
)
:: 处理空值
if not defined cpu_usage set "cpu_usage=0"
echo CPU 占用率:%cpu_usage%%%
echo.
:: 获取内存信息
echo 内存使用情况:
for /f "tokens=2 delims==" %%a in ('wmic OS get TotalVisibleMemorySize /value') do set total=%%a
for /f "tokens=2 delims==" %%a in ('wmic OS get FreePhysicalMemory /value') do set free=%%a
set /a used=total-free
set /a usage=used*100/total
set /a totalGB=total/1048576
set /a usedGB=used/1048576
set /a freeGB=free/1048576
echo 总内存: %totalGB% GB
echo 已使用: %usedGB% GB
echo 可用内存: %freeGB% GB
echo 内存占用率: %usage%%%
echo.
:: 3. 精准获取D盘信息
echo.
echo --- D盘信息 ---
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "deviceid='D:'" get size /value') do set "d_total=%%a"
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "deviceid='D:'" get freespace /value') do set "d_free=%%a"
for /f "delims=" %%a in ('powershell -command "([math]::Round(%d_total%/1073741824,1))"') do set "d_total_gb=%%a"
for /f "delims=" %%a in ('powershell -command "([math]::Round(%d_free%/1073741824,1))"') do set "d_free_gb=%%a"
for /f "delims=" %%a in ('powershell -command "([math]::Round((%d_total%-%d_free%)/1073741824,1))"') do set "d_used_gb=%%a"
for /f "delims=" %%a in ('powershell -command "([math]::Round(((%d_total%-%d_free%)/%d_total%)*100,1))"') do set "d_usage=%%a"
echo D盘总容量:%d_total_gb% GB
echo D盘可用空间:%d_free_gb% GB
echo D盘已用空间:%d_used_gb% GB
echo D盘占用率:%d_usage%%%
echo.
echo ======================================
pause
5. 使用PowerShell获取更详细的信息
如果系统支持PowerShell,可以使用更简洁的命令:
# CPU占用率
Get-WmiObject Win32_Processor | Select-Object LoadPercentage
# 内存信息
Get-WmiObject Win32_OperatingSystem | Select-Object TotalVisibleMemorySize,FreePhysicalMemory | ForEach-Object {
$total = $_.TotalVisibleMemorySize/1MB
$free = $_.FreePhysicalMemory/1MB
$used = $total - $free
$usage = ($used/$total)*100
"内存: 总{0:F2}GB, 已用{1:F2}GB, 可用{2:F2}GB, 占用率{3:F1}%" -f $total, $used, $free, $usage
}
# D盘信息
Get-PSDrive D | Select-Object Used,Free,@{Name="Total";Expression={$_.Used+$_.Free}}
注意事项:
- 需要以管理员身份运行CMD或PowerShell获取完整信息
- 数值单位转换:
- 1GB = 1024MB = 1073741824字节(磁盘)
- 内存计算中使用了1048576(1024*1024)
- WMIC命令在Windows 10/11中仍然可用,但在未来版本中可能被弃用
选择适合你需求的方法即可。批处理脚本可以保存为.bat文件双击运行。
运维上报
上报接口加入参数
@echo off
chcp 65001 >nul 2>&1
setlocal enabledelayedexpansion
echo ======================================
echo 系统资源监控(稳定版)
echo ======================================
:: 1. 获取CPU占用率
echo.
echo --- CPU 信息 ---
for /f "skip=1 tokens=2 delims==" %%a in ('wmic cpu get loadpercentage /value 2^>nul') do (
set "cpu_usage=%%a"
)
:: 处理空值
if not defined cpu_usage set "cpu_usage=0"
echo CPU 占用率:%cpu_usage%%%
:: 2. 获取内存信息
echo.
echo 内存使用情况:
for /f "tokens=2 delims==" %%a in ('wmic OS get TotalVisibleMemorySize /value') do set total=%%a
for /f "tokens=2 delims==" %%a in ('wmic OS get FreePhysicalMemory /value') do set free=%%a
set /a used=total-free
set /a usage=used*100/total
set /a totalGB=total/1048576
set /a usedGB=used/1048576
set /a freeGB=free/1048576
echo 总内存: %totalGB% GB
echo 已使用: %usedGB% GB
echo 可用内存: %freeGB% GB
echo 内存占用率: %usage%%%
:: 3. 精准获取D盘信息
echo.
echo --- D盘信息 ---
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "deviceid='D:'" get size /value') do set "d_total=%%a"
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "deviceid='D:'" get freespace /value') do set "d_free=%%a"
:: 使用PowerShell计算容量(单位:GB)
if "%d_total%"=="" (
echo D盘不存在或无法访问
set "d_total_gb=0"
set "d_free_gb=0"
set "d_used_gb=0"
set "d_usage=0"
) else (
for /f "delims=" %%a in ('powershell -command "([math]::Round(%d_total%/1073741824,1))"') do set "d_total_gb=%%a"
for /f "delims=" %%a in ('powershell -command "([math]::Round(%d_free%/1073741824,1))"') do set "d_free_gb=%%a"
for /f "delims=" %%a in ('powershell -command "([math]::Round((%d_total%-%d_free%)/1073741824,1))"') do set "d_used_gb=%%a"
for /f "delims=" %%a in ('powershell -command "([math]::Round(((%d_total%-%d_free%)/%d_total%)*100,1))"') do set "d_usage=%%a"
)
echo D盘总容量:%d_total_gb% GB
echo D盘可用空间:%d_free_gb% GB
echo D盘已用空间:%d_used_gb% GB
echo D盘占用率:%d_usage%%%
echo.
echo ======================================
:: 4. 准备要发送的数据
set "data_cpu=%cpu_usage%"
set "data_mem=%usage%"
set "data_d_free=%d_free_gb%"
set "data_d_usage=%d_usage%"
:: ===================== 获取本机 IPv4 地址(CMD 兼容版)=====================
set "ip=未获取到IP"
for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr /i "IPv4.*[0-9]" ^| findstr /v "127.0.0.1"') do (
for /f "tokens=* delims= " %%b in ("%%a") do (
set "ip=%%b"
goto :got_ip
)
)
:got_ip
:: ===================== 第一步:获取并格式化当前时间 =====================
:: 从系统获取精准时间(避免%time%格式不统一问题)
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "datetime=%%a"
:: 格式化为:YYYY-MM-DD HH:MM:SS(例如:2026-01-26 16:45:30)
set "current_time=!datetime:~0,4!-!datetime:~4,2!-!datetime:~6,2! !datetime:~8,2!:!datetime:~10,2!:!datetime:~12,2!"
:: 构造发送文本 - 使用中文冒号避免解析问题
set "sendtext=ip%ip%-%current_time%-CPU占用率-%data_cpu%%%-内存占用率-%data_mem%%%-D盘可用空间-%data_d_free%GB-D盘占用率-%data_d_usage%%%"
:: ===================== 新增:写入数据到yunwei.txt =====================
:: 追加写入(>> 表示追加,> 表示覆盖,这里用追加)
echo %sendtext% >> yunwei.txt
echo 已将监控数据写入 yunwei.txt:%sendtext%
echo.
echo 准备发送的数据:%sendtext%
:: 5. 发送数据到API接口
:: 注意:如果接口需要URL编码,这里需要处理
set "API_URL=http://8.137.155.15:6954/api/test_notify2?id=%sendtext%^&flag=false"
:: ========== 关键修复1:对sendtext进行URL编码 ==========
:: 使用PowerShell的URL编码功能,处理中文、%、小数点等特殊字符
for /f "delims=" %%a in ('powershell -command "[System.Net.WebUtility]::UrlEncode('%sendtext%')"') do set "encoded_sendtext=%%a"
:: ========== 关键修复2:构造编码后的合法URL ==========
set "API_URL=http://xxxx:6954/api/test_notify2?id=%encoded_sendtext%^&flag=false"
echo 编码后的合法URL:
echo %API_URL%
echo.
:: 6. 发送请求
:SEND_API_REQUEST
echo.
echo [INFO] 开始发送GET请求...
:: 方法1:直接使用curl(最简单)
curl -s -m 10 "%API_URL%"
:: 检查curl执行状态
if %errorlevel% neq 0 (
echo.
echo [ERROR] GET请求发送失败!
echo 错误代码:%errorlevel%
echo.
echo 可能的原因:
echo 1. 请确保系统已安装curl(Windows 10/11自带)
echo 2. 如果没有curl,请手动安装或使用下面的替代方案
echo.
:: 方法2:使用PowerShell作为备用方案
echo [INFO] 尝试使用PowerShell发送请求...
powershell -Command "Invoke-WebRequest -Uri '%API_URL%' -UseBasicParsing" >nul 2>&1
if %errorlevel% equ 0 (
echo [SUCCESS] 使用PowerShell发送成功!
) else (
echo [ERROR] 所有发送方法都失败了!
)
) else (
echo.
echo [SUCCESS] 请求发送成功!
)
echo.
pause