2017-02-11 21 views
1

好吧,我有這樣的代碼:採取從可用空間和存儲所需的空間可變

echo [%time%] Beginning install 
echo [%time%] Checking hard drive C:\ 
for /f "usebackq tokens=* delims=" %%# in (`"wmic logicaldisk where name='C:' get FreeSpace /format:value"`) do (
    for /f "tokens=* delims=" %%a in ("%%#") do @set "%%a" 
) 
echo [%time%] Available space: %freespace% Bytes 
echo [%time%] Required space: 34 Megabytes 
@set requiredspace=34 
@set /a "available_required=%freespace%-%requiredspace%" 
echo [%time%] %available_required% 
pause 

它找到一個硬盤上的可用存儲空間,並帶走,以找出是否有足夠的存儲要求爲了完成安裝,不幸的是,Windows CMD不喜歡高於32位的數字,所以我需要將它降低到兆字節,數學不能在存儲的變量上完成,因此它必須直接從命令中找到。 例如,(顯然不是,雖然工作)

"wmic logicaldisk where name='C:' get FreeSpace /format:value /division:megabytes" 

感謝

+1

爲什麼沒」你剛剛在你之前的問題中包含這個嗎? – Squashman

+0

[Here](http://stackoverflow.com/a/36318398),您可以找到一個純粹的[tag:batch-file]解決方案,用於執行超過帶符號的32位整數的除數(1024 * 1024)範圍... – aschipfl

回答

1

而是利用WMIC的,你可以爲你的自由空間計算直接利用PowerShell的成兆字節:

@Echo Off 

For /F "Delims=" %%A In ('Powershell "gWMI Win32_LogicalDisk"^ 
"-F ""DeviceID='C:'""""|%%{[Math]::Round($_.FreeSpace/1MB,0)}"' 
) Do Set "FDS=%%A" 
Echo=Freespace on C: is %FDS%MB 

Timeout -1 

如果您正在尋找GB到兩位小數,然後上面的快速編輯也可以實現:

@Echo Off 

For /F "Delims=" %%A In ('Powershell "gWMI Win32_LogicalDisk"^ 
"-F ""DeviceID='C:'""""|%%{[Math]::Round($_.FreeSpace/1GB,2)}"' 
) Do Set "FDS=%%A" 
Echo=Freespace on C: is %FDS%GB 

Timeout -1 
0

快速和髒:

set "freespace=%freespace:~0,-6%" 
echo [%time%] Available space: %freespace% MBytes 

鴻溝的自由空間了1,000,000,而不是1024^2

0

可以墊的值,並比較它們作爲字符串

set "rSpace=00000000000035651584" 
set "fSpace=00000000000000000000%freeSpace%" 
if "%rSpace:~-20%" gtr "%fSpace:~-20%" (
    echo [%time%] Not enough space available 
) else (
    echo [%time%] Enough Space available 
)