日期:2014-05-17  浏览次数:21157 次

bat 获取硬件问题(硬盘,cpu)
我现在写的批处理文件遇到几个问题:
1. 想得到IP,我直接用ipconfig,虽然可以得到,但是如何截取,只要后面的IP地址?
得到: IP Address. . . . . . . . . . . . : 10.8.0.91
只显示红色的部分,如何截取???
Assembly code

echo IP地址: 
for /f "tokens=1,* delims==" %%a in ('ipconfig^|find "IP Address"') do (    
     set /a tee+=1
     echo %%a %%b
) 
echo. 



2. 做硬盘剩余空间的时候,要只得到总空间和已用空间,因为不会处理批处理中的计算,所以只能得到单独的如c e
f 盘等的信息,我要得到他们已用空间的和,请问如何处理?转换成MB形式(我除的时候不知道怎么处理)?就是最后只用写已用空间 ...MB 
总空间 ...MB
Assembly code

echo 硬  盘: 
for /f "tokens=1,* delims==" %%a in ('wmic DISKDRIVE get size^,totalsectors /value') 
do ( 
     set /a tee+=1 
     if "!tee!" == "3" echo         总   空  间  = %%b 
     if "!tee!" == "4" echo         已 用 空 间  = %%b 
) 
echo.



3. 计算cpu核数时候有问题,一是NumberOfCores / NumberOfLogicalProcessors这两个没有,我想得到普遍适合的(限于windows系列);二是不会计算,只会简单的得到处理器个数。。 

望高手,版主指点!!!谢谢!!!结贴率100%。。。。


------解决方案--------------------
test1.bat

BatchFile code

@echo off
for /f "tokens=4" %%a in ('route print^|findstr 0.0.0.0.*0.0.0.0') do (
    set IP=%%a
)
echo,%IP%

------解决方案--------------------
硬盘空间的大小一般来说是超出了BAT能够直接计算的范围,也就是说直接除以1024是不行的。一般的解决方案:

1、自己在BAT里面写大数算法
2、在BAT里面动态生成一个用于计算的VBS

不知楼主更加倾向于哪种方案?
------解决方案--------------------
BatchFile code

echo %number_of_processors%

------解决方案--------------------
BatchFile code
@echo off
setlocal enabledelayedexpansion

cls
set /a num2=1024*1024
set total=0
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
    set num1=0
    set num3_str=
    set num4=
    for /f "tokens=3" %%j in ('dir /-c %%i:\ 2^>nul') do (
        set num1=%%j
    )
    if not "!num1!"=="0" (
        call :loop
        for /f "delims=0 tokens=*" %%k in ("!num3_str!") do (
            set num3_str=%%k
        )
        echo.
        echo %%i 盘剩余空间为 !num3_str! MB
        set /a total+=!num3_str!
        echo.
    )
)
echo 剩余空间总量为 !total! MB
pause
goto :eof

:loop
:: 求商
set /a num3=%num4%%num1:~0,1%/%num2%
:: 求商序列
set num3_str=%num3_str%%num3%
:: 求余
set /a num4=%num4%%num1:~0,1%%%%num2%
if %num4% equ 0 (
    set num4=
)
set num1=%num1:~1%
if not "%num1%"=="" (
    goto :loop
)
goto :eof