2013-05-22 45 views
0

如何通过运行.bat文件获取驱动器总空间和可用空间。在PowerShell脚本中是可能的。但我不应该使用电源外壳。在我需要的基本脚本编程中。我曾尝试下面的代码,但它没有给出正确的结果驱动器(C:/ D:/ E:/).bat文件中的详细信息

fsutil volume diskfree C:\>temp.txt 
FOR /F "Tokens=* skip=1 delims= " %%A IN (temp.txt) DO echo %%A>>temp2.txt 
SORT /+32 temp2.txt /O temp3.txt 
FOR /F "tokens=5 Delims=: " %%A IN (temp3.txt) DO ECHO %%A>temp4.txt 
FOR /f "tokens=1 Delims= " %%A IN (temp4.txt) DO SET a=%%A 
set /a b=%a:~0,-10% 
set /a c=b*1024 
PAUSE 
DEL temp.txt 
DEL temp1.txt 
DEL temp2.txt 
DEL temp3.txt 
DEL temp4.txt 
CLS 
ECHO %b% GB (%c% MB) 
PAUSE 
+1

http://stackoverflow.com/questions/293780/free-space-in-a-cmd-shell – Ofiris

回答

3

都会响起Foxidrive的回答,我已经受够了枚举所有diskdrives和输出大小为每个指定的方式你脚本

@echo off 
setlocal enabledelayedexpansion 

for /f "tokens=1" %%d in (
'wmic logicaldisk where drivetype^=3 get deviceid ^| find ":"') do ( 
    for /f "skip=1 tokens=1,* delims=:" %%a in ('fsutil volume diskfree %%d') do (
     Call :ConvertBytes %%b GB Gigs 
     Call :ConvertBytes %%b MB Megs 
     echo %%d - %%a: !Gigs! GB (^!Megs! MB^) >> output.txt 
    ) 
)  
goto :eof 


:ConvertBytes bytes unit ret 
setlocal 
if "%~2" EQU "KB" set val=/1024 
if "%~2" EQU "MB" set val=/1024/1024 
if "%~2" EQU "GB" set val=/1024/1024/1024 
> %temp%\tmp.vbs echo wsh.echo FormatNumber(eval(%~1%val%),0) 
for /f "delims=" %%a in ( 
    'cscript //nologo %temp%\tmp.vbs' 
) do endlocal & set %~3=%%a 
del %temp%\tmp.vbs 
+0

究竟返回values..Thanks很多....如何写这个输出值在一个文本文件中。? – RobinHood

+0

只需将回显重定向到文件。查看编辑的代码。 –

+0

+1,我喜欢使用WMIC,并且对大数的算术很好的解决方案。如果您从VBS切换到JScript,则无需临时文件即可轻松完成。请参阅[混合JScript /批处理脚本](http://stackoverflow.com/a/5656250/1012053)。也可以使用VBS。请参见[混合VBS /批处理脚本](http://stackoverflow.com/q/9074476/1012053)。但我认为JScript是一个更好的选择。 – dbenham

1

这可以在这里使用你的工具。我可能误解了 - 你没有说你要计算GB等

@echo off 
for /f "skip=1 tokens=1,* delims=:" %%a in ('fsutil volume diskfree c:') do echo %%a - %%b 
pause