Dòng lệnh Windows lấy không gian đĩa tính bằng GB


12

Tôi đang cố gắng tạo một tệp bó để lấy tổng kích thước và dung lượng trống của ổ C: \ của máy chủ (tập lệnh chạy cục bộ). Tôi cũng cần đầu ra để dễ đọc, do đó byte sẽ không hoạt động, vì vậy tôi ổn với việc có một dòng lệnh tạo tệp temp .vbs.

Điều sau đây có vẻ như có thể hoạt động, nhưng định dạng / toán học không chính xác.

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%

Các lệnh trên cũng chỉ hiển thị không gian trống ... Tôi cũng muốn tổng kích thước ... Tự hỏi liệu lệnh sau có thể tốt hơn để lấy thông tin không:

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

Cũng lưu ý rằng tôi muốn điều này có thể được sao chép / dán trực tiếp vào dấu nhắc lệnh (không phải là tệp bó - yêu cầu bắt buộc). Tôi đã xóa "%%" khỏi mã ở trên.

Lưu ý: Cần chạy tự nhiên trên Server 2003+ (vì vậy Powershell đã hết, cũng như mọi tiện ích của bên thứ 3).


phiên bản nào của windows?
EBGreen

Máy chủ 2003+, nguyên bản. Cập nhật bài viết gốc của tôi để phản ánh điều này.
BondUniverse

Câu trả lời:


10

Trong tệp không phải là tệp bó - mệnh đề yêu cầu bắt buộc , cmdmột lớp lót tiếp theo có thể giúp:

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

Đầu ra :

==>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

Tôi nhận ra rằng bạn đang tìm kiếm VBS ngay bây giờ, nhưng PowerShell có thể làm điều này rất dễ dàng:

$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))

Dòng đầu tiên lấy thông tin đĩa từ WMI (chỉ trong C: trong ví dụ này) và chọn chỉ kích thước Không gian trống và Tổng kích thước.

Trong hai dòng tiếp theo, hãy viết Không gian trống và Tổng kích thước cho bảng điều khiển, được định dạng bằng GB, với các phân số bị cắt bớt.

Ví dụ đầu ra (nguyên trạng):

223GB total
125GB free

1
Quên ghi chú về điều đó ... Cần nó hoạt động tự nhiên trên Server 2003+ (vì Powershell không phải là bản địa năm 2003, không thể sử dụng nó). Chắc chắn sẽ dễ dàng hơn với Powershell!
BondUniverse

3

Trong một tệp bó, bạn có thể lấy kích thước đĩa tính bằng GB của một đĩa được chỉ định bằng cách sử dụng tập lệnh DiskPart. Trong ví dụ này, tôi đang đặt chỉ mục đĩa cụ thể theo tên model của nó (giả sử chỉ có một cái giống như trong máy tính). Thay đổi chuỗi " Đĩa SATA " để khớp với mô hình ổ đĩa của bạn. Bạn có thể lấy tên mô hình bằng cách chạy lệnh " wmic Diskdrive get Model, Index " trong cmd.

Tất nhiên, bạn có thể sử dụng một thuộc tính khác của đĩa trong lệnh wmic - gõ đĩa vũ trụ wmic get /? để có được một danh sách tất cả các thuộc tính đĩa bạn có thể sử dụng.

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

Nếu bạn chỉ cần kiểm tra xem ổ đĩa có đủ dung lượng trống hay không (để cài đặt hoặc sao chép thứ gì đó chẳng hạn), bạn có thể thử truy vấn wmic như thế này:

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

điều này sẽ phá vỡ thực thi tập tin hàng loạt nếu có ít hơn 10Gb miễn phí trên C:


2

Chia cho 1024 để lấy kibytes (2 ^ 10). Chia cho 1024 x 1024 để nhận Mibytes (2 ^ 20). Chia cho 1024 x 1024 x 1024 để nhận Gibyte (2 ^ 30).

Windows gọi các đơn vị này là kilobyte, Megabyte và Gigabyte vì lý do lịch sử. Tôi nghĩ rằng vỏ của tôi là đúng.

Vì vậy, thay đổi số tiền của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.