2013-05-22 46 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