บรรทัดรับคำสั่งของ Windows รับพื้นที่ดิสก์เป็น GB


12

ฉันกำลังพยายามสร้างไฟล์แบตช์เพื่อดึงขนาดโดยรวมและพื้นที่ว่างของไดรฟ์ C: \ ของเซิร์ฟเวอร์ (รันสคริปต์ในเครื่อง) ฉันต้องการเอาต์พุตเพื่อให้สามารถอ่านได้ง่ายดังนั้น bytes จึงไม่ทำงานดังนั้นฉันก็เลยใช้คำสั่งที่สร้างไฟล์ 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:"

โปรดทราบว่าฉันต้องการให้สิ่งนี้สามารถคัดลอก / วางโดยตรงในพรอมต์คำสั่ง (ไม่ใช่ข้อกำหนดแบตช์ - ข้อกำหนดที่บังคับ) ฉันได้ลบ "%%" จากรหัสด้านบนแล้ว

หมายเหตุ: จำเป็นต้องเรียกใช้บนเซิร์ฟเวอร์ 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: ในตัวอย่างนี้) และเลือกเฉพาะขนาดพื้นที่ว่างและขนาดรวม

ในสองบรรทัดถัดไปเขียนพื้นที่ว่างและขนาดรวมไปยังคอนโซลซึ่งจัดรูปแบบให้เป็น GB โดยมีการตัดเศษส่วนออก

ตัวอย่างเอาต์พุต (ตามที่เป็น):

223GB total
125GB free

1
ลืมที่จะใส่บันทึกเกี่ยวกับที่ ... ต้องการให้มันทำงานบนเซิร์ฟเวอร์ 2003+ (เนื่องจาก PowerShell ไม่ได้เป็นเจ้าของในปี 2003 ไม่สามารถใช้งานได้) Powershell จะง่ายกว่านี้แน่ ๆ !
BondUniverse

3

ในไฟล์แบตช์คุณสามารถรับขนาดดิสก์เป็นGBของดิสก์ที่ระบุโดยใช้สคริปต์ DiskPart ในตัวอย่างนี้ฉันกำลังตั้งค่าดัชนีดิสก์เฉพาะตามชื่อรุ่น (สมมติว่ามีเพียงหนึ่งดัชนีในคอมพิวเตอร์) เปลี่ยนสตริง " ดิสก์ SATA " เพื่อให้ตรงกับรุ่นของดิสก์ไดรฟ์ของคุณ คุณสามารถรับชื่อรุ่นโดยเรียกใช้คำสั่ง " wmic diskdrive รับรุ่น, ดัชนี " เป็น 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)

สิ่งนี้จะหยุดการประมวลผลแบตช์ไฟล์หากมีน้อยกว่า 10Gb ใน C:


2

หารด้วย 1024 เพื่อรับ kibytes (2 ^ 10) หารด้วย 1024 x 1024 เพื่อรับ Mibytes (2 ^ 20) หารด้วย 1024 x 1024 x 1024 เพื่อรับ Gibytes (2 ^ 30)

Windows เรียกหน่วยเหล่านี้กิโลไบต์เมกะไบต์และกิกะไบต์สำหรับเหตุผลทางประวัติศาสตร์ ฉันคิดว่าปลอกของฉันถูกต้อง

ดังนั้นเปลี่ยนจำนวนเงินของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.