Windows कमांड लाइन को GB में डिस्क स्थान मिलता है


12

मैं सर्वरों (स्थानीय रूप से चलने वाली स्क्रिप्ट) के C: \ ड्राइव के कुल आकार और मुक्त स्थान को खींचने के लिए एक बैच फ़ाइल बनाने का प्रयास कर रहा हूं। मुझे आसानी से पठनीय होने के लिए आउटपुट की भी आवश्यकता है, इसलिए बाइट्स काम नहीं करने वाले हैं, इसलिए मैं एक कमांड लाइन के साथ ठीक हूं जो एक अस्थायी .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+ (ताकि पॉवर्सशेल बाहर है, साथ ही किसी भी 3 पार्टी के बर्तन) को चलाने की आवश्यकता है।


विंडोज़ का क्या संस्करण?
ईबीग्रीन

सर्वर 2003+, मूल रूप से। इसे दर्शाने के लिए मेरी मूल पोस्ट को अपडेट करें।
बॉन्डयूनिवर्स

जवाबों:


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 पर मूल रूप से काम करने की आवश्यकता है (चूंकि पॉवर्सशेल 2003 में मूल नहीं है, इसका उपयोग नहीं कर सकते हैं)। निश्चित रूप से Powershell के साथ आसान होता है, हालांकि!
बॉन्डयूनिवर्स

3

एक बैच फ़ाइल में, आप डिस्कपार्ट स्क्रिप्ट का उपयोग करके निर्दिष्ट डिस्क के GB में डिस्क का आकार प्राप्त कर सकते हैं । इस उदाहरण में, मैं इसके मॉडल के नाम के अनुसार विशिष्ट डिस्क इंडेक्स सेट कर रहा हूं (यह मानते हुए कि कंप्यूटर में केवल एक ही ऐसा है)। अपने डिस्क ड्राइव के मॉडल से मिलान करने के लिए स्ट्रिंग " SATA डिस्क " बदलें । आप cmd में " wmic diskdrive get Model, Index " कमांड चलाकर मॉडल का नाम प्राप्त कर सकते हैं ।

बेशक, आप 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 LogicalDisk where "DeviceID='c:' and FreeSpace > 10737418240" get DeviceID 2>&1 ^ | find /i "c:" >nul || (echo not enough space&exit 1)

यदि C पर 10Gb से कम है तो यह बैच फ़ाइल निष्पादन को तोड़ देगा:


2

किबाइट्स (2 ^ 10) प्राप्त करने के लिए 1024 से विभाजित करें। Mibytes (2 ^ 20) प्राप्त करने के लिए 1024 x 1024 से विभाजित करें। गिबित्स (2 ^ 30) प्राप्त करने के लिए 1024 x 1024 x 1024 से विभाजित करें।

ऐतिहासिक कारणों से विंडोज इन इकाइयों को किलोबाइट्स, मेगाबाइट्स और गीगाबाइट्स कहती है। मुझे लगता है कि मेरा आवरण सही है।

इसलिए अपनी रकम बदलिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.