web-dev-qa-db-ja.com

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

サーバーの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がリリースされ、サードパーティのユーティリティも同様です)。

12
BondUniverse

バッチファイルではない-強制された要件句の下で、次の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

==>
9
JosefZ

あなたは今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
11

バッチファイルでは、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
Eric

ドライブに十分な空き容量があるかどうかを確認するだけの場合(たとえば、何かをインストールまたはコピーするため)、次のような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未満の場合、バッチファイルの実行が中断されます。

3
anilech

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

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

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

2
trigger