質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Chocolatey

Chocolateyは、Windows向けパッケージ管理ソフトウェアです。Windows上で動作するソフトウェアの依存関係を含め、簡単に更新・インストール・アンインストール・検索を行うことができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

3回答

402閲覧

バッチファイルでwmicコマンドの実行結果し、表示結果をギガバイトにする

hkou

総合スコア1

Chocolatey

Chocolateyは、Windows向けパッケージ管理ソフトウェアです。Windows上で動作するソフトウェアの依存関係を含め、簡単に更新・インストール・アンインストール・検索を行うことができます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2024/05/19 07:08

###前提・実現したいこと

バッチファイルでwmic memorychip get capacityを実行し、実行結果の単位をバイト→ギガバイトにしたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

バッチファイルだと厳しいですね…これは。
質問内容からは逸脱してしまいますが、PowerShellが使えるようなら、もうちょっと簡単に同じ値が得られます。よろしければご検討ください。

自分の端末(Microsoft Surface Pro 7+/Win11Pro/メモリー8GB)で実行。

コマンドプロンプトでの結果

cmd

1PS C:\Users\xxxxx> wmic memorychip get capacity 2Capacity 31073741824 41073741824 51073741824 61073741824 71073741824 81073741824 91073741824 101073741824

PowerShellで実行

PowerShell

1PS C:\Users\xxxxx> Get-CimInstance -ClassName Win32_PhysicalMemory | FT Name,@{N='Capacity';E={$_.Capacity / 1GB}} 2 3Name Capacity 4---- -------- 5物理メモリ 1 6物理メモリ 1 7物理メモリ 1 8物理メモリ 1 9物理メモリ 1 10物理メモリ 1 11物理メモリ 1 12物理メモリ 1

PowerShell版の最後の部分の"1GB"を、MB単位にしたいなら"MB"にバイト単位にしたい場合は"/ 1GB"を削除すると良いでしょう。

投稿2024/05/20 10:45

Takeda_Kazuhito

総合スコア379

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

オプションでGB単位MB単位で表示というのは無さそうなので、バイト単位で取得するしかないですね。

普通1GBというと2の30乗=1073741824バイトなので、普通にGB単位にするなら1073741824で割ることになりますが、バッチスクリプトで数値演算できるのは、32ビット符号付き整数で、最大値は2147483647。つまり2GBまでなので、それ以上のサイズは数値計算は駄目ですね。
数値として扱えないので、
・他の言語を呼び出して数値計算を任せる
・文字列として扱って下9文字を削除する (下9文字を削除というのは1000000000で割ると言うことなので概算になる)
・バッチの組み込みの数値演算機能に頼らず自分で数値演算機能(1073741824で割る機能)をコーディングする

下9桁削除で行くなら、

CMD

1@echo off 2for /f "skip=1" %%A in ('wmic memorychip get capacity') do call :print %%A 3exit /b 4 5:print 6set MEMSIZE=%~1 7if not defined MEMSIZE exit /b 8echo %MEMSIZE:~0,-9% 9exit /b

8GBなら「8」、16GBなら「17」と表示されます。

なお、wmicコマンドは削除対象らしいですよ。
参考:窓の杜記事 https://forest.watch.impress.co.jp/docs/news/1564283.html

投稿2024/05/19 13:39

otn

総合スコア85458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hkou

2024/05/20 02:50

早速の詳細なご連絡ありがとうございました! なるほど、色々と方法があるんですね。 こちらをご参考にさせていただきます。 ベストアンサーは別の方を選ばせていただきましたが、こちらの回答も非常に参考になりました。
guest

0

計算部分は、JScript にやらせる。

batch

1@if(0)==(0) echo off 2setlocal enabledelayedexpansion 3for /f %%a in ('wmic memorychip get capacity') do ( 4 for %%b in (%%a) do ( 5 echo %%b| findstr /r "^[0-9][0-9]*">nul 6 if !errorlevel! equ 0 ( 7 cscript //nologo //E:JScript "%~f0" %%b 8 echo !errorlevel! 9 ) else ( 10 echo %%b 11 ) 12 ) 13) 14exit /b 15@end 16 17var arg = WScript.Arguments(0); 18var N = arg / 1024 /1024 /1024 19WScript.Quit(N);

似たような質問を別サイトで以下のようにも書きましたが・・・。

batch

1@powershell -c "wmic memorychip get capacity | ? {$_ -ne ''} | foreach {if($_ -match '\d+'){$_/1GB} else {$_}}"

投稿2024/05/20 14:29

v838-mon

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問