我试图在批处理文件中获取整数可用磁盘空间。这是我(非常)简单的代码。
@echo off
wmic logicaldisk get freespace >> freespace.log
exit
但是在freespace.log文件中输出。
FreeSpace
9772687360
57401442304
7346626560
0
0
我需要选择整数和求和。在这样的求和输出之后。
74520756224
我在谷歌搜索是最好的,但我无法找到解决方案。请帮帮我:)。
答案 0 :(得分:5)
这是使用混合批次和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%
答案 1 :(得分:1)
使用以下代码。如果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"
答案 2 :(得分:1)
我的第二个@ 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位数字。这样你可以用兆字节而不是字节计算,但(显然)会失去一些精度,因为该值被截断(而不是正确舍入)。
答案 3 :(得分:1)
这是一个纯批处理解决方案,可以处理大于~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%