如何获得在批处理文件的可用磁盘空间的整数?(How to get integer of free d

2019-07-02 19:07发布

我试图让在批处理文件的可用磁盘空间的整数。 这是一个我非常简单的代码。

@echo off
wmic logicaldisk get freespace >> freespace.log
exit

但在freespace.log文件输出。

FreeSpace    
9772687360   
57401442304  
7346626560   
0            
0            

我只需要和求和挑整数。 经过这样的求和输出。

74520756224

我在谷歌搜索作为我最好的,但我不能找到解决办法。 请帮我:)

Answer 1:

下面是一个使用混合料和的powershell精确解。 它真的应该用纯PowerShell中,VBScript中,或JScript来实现。

非直观的使用令牌和IF语句用来补偿FOR / F和WMIC的Unicode输出之间的怪异互动。

@echo off
setlocal enableDelayedExpansion
set /a freeSpace=0
for /f "skip=1 tokens=1,2" %%A in ('wmic logicaldisk get freespace') do (
  if "%%B" neq "" for /f %%N in ('powershell !freeSpace!+%%A') do (
    set freeSpace=%%N
  )
)
echo freeSpace=%freeSpace%


Answer 2:

使用下面的代码。 尝试更换caption与文字deviceid ,如果它显示? 还是空白。

@echo off
setlocal
set drive=C
set free=?
rem Note: WMIC will output unicode text
wmic logicaldisk where (caption = "%drive%:") get freespace>"%temp%\free.tmp"
for /f %%A in ('type "%temp%\free.tmp"') do (set free=%%A)
echo Free space: %free% bytes
rem if exist "%temp%\free.tmp" del "%temp%\free.tmp"


Answer 3:

我第二@ dbenham的建议切换到PowerShell的(或至少VBScript或JScript)。 不过,如果你想坚持批次,不需要你会做这样的事情确切的数字:

@echo off

setlocal EnableDelayedExpansion

for /f %%v in ('wmic logicaldisk get freespace ^| findstr /r "[0-9]"') do (
  set val=%%v
  set val=!val:~-6!
  set /a sum+=val
)

echo !sum!

endlocal

该生产线set val=!val:~-6! 去除每个值的最后6位数字。 这样,你可以用兆字节而不是字节计算,但(显然)失去一些精度,因为值被截断(而不是正确四舍五入)。



Answer 4:

这里是一个可以处理数超过2G〜大于纯批次的解决方案:

@echo off
setlocal EnableDelayedExpansion
set /A "SUMMEG=0" & set /A "SUMONE=0"
set /A "NUM=6" & set "ZER=000000"
for /F "tokens=2 delims==" %%F in ('
    wmic LOGICALDISK GET FreeSpace /VALUE
') do (
    for %%G in (%%F) do (
        set "ONE=%ZER%%%G"
        for /F "tokens=* delims=0" %%H in ("!ONE:~,-%NUM%!") do set "MEG=%%H"
        for /F "tokens=* delims=0" %%H in ("!ONE:~-%NUM%!") do set "ONE=%%H"
        set /A "SUMMEG+=MEG" & set /A "SUMONE+=ONE"
    )
)
if not "!SUMONE:~,-%NUM%!"=="" (set /A "SUMMEG+=!SUMONE:~,-%NUM%!")
set "SUMONE=%ZER%!SUMONE!" & set "SUMONE=!SUMONE:~-%NUM%!"
for /F "tokens=* delims=0" %%H in ("%SUMMEG%%SUMONE%") do set "FRE=%%H"
endlocal & if "%FRE%"=="" (set "FRE=0") else (set "FRE=%FRE%")
echo %FRE%


文章来源: How to get integer of free disk space in Batch file?