Командний рядок Windows отримує дисковий простір в ГБ


12

Я намагаюся створити пакетний файл, щоб витягнути загальний розмір і вільний простір C: \ приводу серверів (локально запущений скрипт). Мені також потрібно, щоб результат був легко читабельним, тому байти не працюватимуть, тому я добре з командним рядком, який створює файл temp .vbs.

Наступне, здається, могло б працювати, але форматування / математика невірне.

setlocal
for /f "tokens=6" %a in ('fsutil volume diskfree C: ^| find "of bytes"') do set diskspace=%a
echo wsh.echo FormatNumber(cdbl(%diskspace%)/1024, 0) > %temp%.\tmp.vbs
for /f %a in ('cscript //nologo %temp%.\tmp.vbs') do set diskspace=%a
del %temp%.\tmp.vbs
echo For example %diskspace%

Наведені вище команди також показують лише вільний простір ... Я також хотів би загального розміру ... Цікаво, чи може наступна команда була кращою для отримання інформації:

WMIC LOGICALDISK GET Name,Size,FreeSpace | find /i "C:"

Зауважте також, що я хочу, щоб це було можливість копіювати / вставляти безпосередньо в командний рядок (а не пакетний файл - вимушені вимоги). Я вже видалив "%%" з коду вище.

Примітка. Потрібно запускатися на сервері Server 2003+ (тому Powershell не працює, як і будь-які сторонні утиліти).


яка версія Windows?
EBGreen

Сервер 2003+, рідно. Оновіть мою оригінальну публікацію, щоб відобразити це.
BondUniverse

Відповіді:


10

У розділі не пакетного файлу - вимушеному вимозі , наступний cmdоднокласник може допомогти:

for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs

Вихід :

==>for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FIND
STR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^
)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/
1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nolog
o %temp%\tmp.vbs & del %temp%\tmp.vbs

C: free=79,11 GiB size=111,45 GiB

D: free=929,47 GiB size=931,51 GiB

==>

11

Я розумію, ти зараз виглядаєш як VBS, але PowerShell може це зробити дуже легко:

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size, FreeSpace

Write-Host ("{0}GB total" -f [math]::truncate($disk.Size / 1GB))
Write-Host ("{0}GB free" -f [math]::truncate($disk.FreeSpace / 1GB))

Перший рядок отримує інформацію про диск від WMI (так само C: у цьому прикладі) та вибирає просто розміри вільного простору та загального розміру.

У наступні два рядки запишіть на консоль розміри «Вільний простір» та «Загальний розмір», відформатовані у форматі ГБ, з урізаними дробами.

Приклад виведення (як є):

223GB total
125GB free

1
Забув помітити про це ... Потрібно, щоб він працював на сервері 2003+ (оскільки Powershell не є рідним у 2003 році, не можу ним користуватися). Однозначно було б простіше з Powershell!
BondUniverse

3

У пакетному файлі ви можете отримати розмір диска в ГБ визначеного диска, використовуючи скрипт DiskPart. У цьому прикладі я встановлюю конкретний індекс диска відповідно до його назви моделі (припустимо, що в комп'ютері є лише такий, як він). Змініть рядок " SATA Disk " відповідно до моделі вашого дисковода. Ви можете отримати ім'я моделі, виконавши команду " wmic diskdrive get Model, Index " в cmd.

Звичайно, ви можете використовувати іншу властивість диска в команді wmic - тип wmic diskdrive get /? щоб отримати список усіх властивостей диска, якими ви можете скористатися.

for /f %%I in ('wmic diskdrive get Model^, Index ^| find "SATA Disk"') do set DISK_Index=%%I

if not exist %~dp0Disk_Size.script (echo list disk > %~dp0Disk_Size.script)
@echo off
FOR /F "tokens=4 delims= " %%J in ('diskpart /s %~dp0Disk_Size.script ^| find "Disk %DISK_Index%"') do set DISK_SIZE=%%J
IF %ERRORLEVEL% EQU 1 (echo No Data was processed, cannot get DISK_SIZE)

echo DISK_SIZE is %DISK_SIZE% GB

3

Якщо вам просто потрібно перевірити, чи не вистачає місця на диску, щоб встановити або скопіювати щось на зразок), ви можете спробувати wmic-запит на зразок цього:

wmic LogicalDisk where "DeviceID='c:' and FreeSpace > 10737418240" get DeviceID 2>&1 ^ | find /i "c:" >nul || (echo not enough space&exit 1)

це призведе до порушення виконання пакетного файлу, якщо на C є менше 10 Гбіт безкоштовно:


2

Розділіть на 1024, щоб отримати кібайт (2 ^ 10). Розділіть на 1024 х 1024, щоб отримати мібайт (2 ^ 20). Розділіть на 1024 x 1024 x 1024, щоб отримати гібайт (2 ^ 30).

Windows називає ці одиниці кілобайт, мегабайт і гігабайт з історичних причин. Я думаю, що моя оболонка є правильною.

Тож змініть свої суми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.