WindowsコマンドラインはGBでディスク容量を取得します


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、2015

Server 2003以降、ネイティブ。これを反映するために私の元の投稿を更新します。
BondUniverse 2015

回答:


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

1行目はWMIからディスク情報を取得し(この例ではC:のみを実行)、空き容量と合計サイズのみを選択します。

次の2行で、フリースペースと合計サイズをコンソールに書き込み、端数を切り捨ててGBでフォーマットします。

出力例(現状のまま):

223GB total
125GB free

1
それについてのメモを書くのを忘れていました... Server 2003+でネイティブに動作する必要があります(Powershellは2003でネイティブではないため、使用できません)。間違いなく、Powershellを使うともっと簡単になります。
BondUniverse 2015

3

バッチファイルでは、DiskPartスクリプトを使用して、指定したディスクのディスクサイズをGB単位で取得できます。この例では、モデル名に基づいて特定のディスクインデックスを設定しています(コンピューターにそのようなものは1つしかないと想定しています)。文字列「SATA Disk」を、ディスクドライブのモデルと一致するように変更します。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クエリを試すことができます。

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

1024で除算して、キロバイト(2 ^ 10)を取得します。1024 x 1024で除算して、Mibytes(2 ^ 20)を取得します。1024 x 1024 x 1024で除算して、ギバイト(2 ^ 30)を取得します。

Windowsでは、歴史的な理由から、これらの単位をキロバイト、メガバイト、ギガバイトと呼んでいます。私のケーシングは正しいと思います。

だからあなたの合計を変更します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.