###前提・実現したいこと
バッチファイルでwmic memorychip get capacityを実行し、実行結果の単位をバイト→ギガバイトにしたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
回答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
総合スコア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
総合スコア85458
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
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
総合スコア4
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。