本帖最后由 aztec 于 2018-6-8 00:15 编辑
@echo off & setlocal enabledelayedexpansion
for /f "delims=g" %%a in ('cmd /u /cEcho,有') do set "Tab=%%a"
set w=wmic diskdrive where "MediaType like 'fixed%%'"
set "w=%w% get DeviceID^,Model^,Size"
for /f "tokens=1*delims==" %%i in ('%w% /value ^| find "="') do (
if /i "%%i" == "DeviceID" set /a n+=1
set "%%i!n!=%%j"
)
set "w1=wmic path Win32_DiskDriveToDiskPartition get Antecedent^,Dependent"
set "w2=wmic path Win32_LogicalDiskToPartition get Antecedent^,Dependent"
(for /l %%i in (1 1 !n!) do (
call :GetSize !Size%%i!000 size
if !size! gtr 102400 (set /a size/=1024 & set "G= GB") else set "G= MB"
set /p=硬盘%%i:%Tab%<nul
set /p=大小:!size:~,-2!.!size:~-2!!G!%Tab%<nul
set /p=型号:!Model%%i!<nul
echo,
for /f tokens^=4delims^=^" %%a in ('%w1% ^| find /i """!DeviceID%%i!"""') do (
for /f tokens^=4delims^=^" %%b in ('%w2%^|find /i """%%a"""') do (
set "w3=wmic logicaldisk where "Name='%%b'" get FreeSpace^,Size"
for /f "tokens=1,2" %%c in ('!w3!^|findstr [0-9]') do (
call :GetSize %%c000 free
call :GetSize %%d000 size
set /a used=size-free
if !size! gtr 102400 (
set /a size/=1024,used/=1024 & set "G= GB"
) else set "G= MB"
set /a used=1000*used/size
if "!used:~,-1!" == "" set "used=0!used!"
set /p=分区%%b%Tab%<nul
set /p=大小:!size:~,-2!.!size:~-2!!G!%Tab%<nul
if !free! gtr 102400 (
set /a free/=1024 & set "G= GB"
) else set "G= MB"
set /p=剩余:!free:~,-2!.!free:~-2!!G!%Tab%<nul
set /p=使用率:!used:~,-1!.!used:~-1!%%<nul
echo,
)
)
)
echo,
))
pause & exit/b
:GetSize
set "num=%1" & set "n=" & set "%2="
for %%a in (16 8 4 2 1) do (
if not "!num:~%%a!"=="" set /a n+=%%a & set "num=!num:~%%a!"
)
set "num=%1" & set /a n-=6
for /l %%a in (!n! -1 1) do (
set "s=!num:~,-%%a!"
if "!s:~,1!" == "0" set "s=!s:~1!"
set /a m=s%%1048576,s/=1048576
set "%2=!%2!!s!"
set "num=!m!!num:~-%%a!"
)
if not defined %2 (
set "%2=!num:~,-1!"
) else if "!%2:~,1!" == "0" set "%2=!%2:~1!"
这段代码,我想用在自己的bat中,但是如果是直接放进去,不管是放在头尾中间什么地方都不行,直接跳过了,唯一方法是只能将其保存为bat,用call调用,应该是环境变量的问题,但不知道怎么修改,还请各位老师赐教 |