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}}

注意事项:

  1. 需要以管理员身份运行CMD或PowerShell获取完整信息
  2. 数值单位转换:
    • 1GB = 1024MB = 1073741824字节(磁盘)
    • 内存计算中使用了1048576(1024*1024)
  3. 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