2014-01-21 4 views

ответ

1
for /f "delims=" %%a in ('wmic logicaldisk where ^"DeviceID^=^'D:^'^" get size^,freespace^,caption /format:Wmiclivalueformat.xsl^|find "="') do @set %%a 

Поскольку цифры могут быть довольно большими и переливаются целыми числами вы можете получить получить свободное пространство в ГБ, получая подстроку (быть благодарными, что это требует только разделения по степеням 10 - хотя это не очень точно, как реальное деление должно быть на 1024):

set freespaceinGB=%freespace:~0,-10% 
set freespaceinGB_MOD=%freespace:~-10,-8% 
echo %freespaceinGB%,%freespaceinGB_MOD% 
+0

Привет, это работает. Могу ли я получить свободное место в ГБ. – user3164140

+0

Да..Просто дайте мне минуту – npocmaka

0

Если вы знаете сценарий VB, то проверьте эту ссылку Microsoft, это может решить вашу проблему. http://technet.microsoft.com/en-us/library/ee198873.aspx

Вам просто нужно скопировать этот код в блокнот и сохранить его в формате .vbs и выполнить файл из командной строки. команда будет такой. cscript filename.vbs

0

У меня есть пакетный файл, который проверяет HDD, Mem, OS и CPU arch, я разорвал его немного, чтобы он соответствовал вашим потребностям. Просто установите желаемый диск, а затем :. Чтобы преобразовать байты в GB, я сначала обрезаю 1000, пока значение не сможет поместиться в 32 бит, и только тогда я делю на 1024. (cmd может обрабатывать только 32-битные целые числа).

@echo off setlocal EnableDelayedExpansion 

rem UNIT is used to convert from Bytes to GB 
rem   0 - B, 1 - KB, 2 - MB, 3 - GB 

SET DRIVE="C:" 

REM check all local drives for minimum space requirement 
:Local_Drives_space_check 
for /F "skip=1 tokens=1,2" %%a in ('wmic LogicalDisk Where DeviceID^=!DRIVE! Get FreeSpace') do (
    if not "%%b"=="" (
     set /A UNIT=0 
     set _tmp=%%a 
     call :TRIM !_tmp! space 
     echo drive !_drive:~0,1! has !space!GB free space 
      ) 
    ) 
) 
goto :end 
REM :TRIM should get value to trim and a var name to store answer 
REM examle: call :TRIM 536870912000 space 
REM answer will be 512GB even though correct answer is 500GB 
REM cmd.exe cannot handle numbers larger then 32bit 
:TRIM 
set _tmp=%1 
set %2= 
set /A %2=!_tmp! >nul 2>nul 
if not defined %2 (
    set _tmp=!_tmp:~0,-3! 
    set /A UNIT=!UNIT!+1 
    call :TRIM !_tmp! %2 
    goto :eof 
) 
:GB 
    if !UNIT! LSS 3 (
     set /A %2=!%2!/1024 
     set /A UNIT=!UNIT!+1 
    ) 
    if !UNIT! LSS 3 goto :GB 
goto :eof 

:end 
1

Эта двойная процедура показывает свободное пространство на всех дисках. Вы можете использовать основной пакетный файл, чтобы найти свободное пространство на одном диске.

@echo off 
for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%A:\ call :bytesfree.bat %%A 
pause 
goto :EOF 


:: Below is the batch file that returns the freespace from the letter in `%1` 


@echo off 
:bytesfree.bat - Salmon Trout 
for /f "tokens=1-3 delims= " %%A in ('dir %1: ^| find "bytes free"') do set bytesfree="%%C" 
echo Wscript.echo Formatnumber(eval(WScript.Arguments(0)/1073742268), 2, True,, False) > "%temp%\Calculate.vbs" 
for /f "delims=" %%A in ('cscript //nologo "%temp%\Calculate.vbs" %bytesfree%') do set GBfree=%%A & del "%temp%\Calculate.vbs" 
set "GBFree=    %GBFRee%" 
set GBFree=%GBFRee:~-12% 
echo %1 %GBfree% GB free 
goto :EOF 
+0

Эй Спасибо, это работает для меня. Он просит нажать enter для продолжения .. как эта часть может быть удалена. Это означает, что он должен немедленно командовать командной строкой. Также Можем ли мы иметь такой диск, как диск C, должен иметь 20 ГБ свободного места, а E-диск имеет свободное пространство на 50 ГБ. Если оба условия выполнены, тогда распечатывайте статус как OK еще Не в порядке с соответствующим уведомлением о свободном диске. – user3164140

Смежные вопросы