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

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

新規登録して質問してみよう
ただいま回答率
85.48%
バッチファイル

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

Q&A

解決済

2回答

7363閲覧

バッチで特定のシステム情報を抽出する方法

dai3922

総合スコア34

バッチファイル

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

0グッド

0クリップ

投稿2017/11/24 02:56

バッチファイルでシステム情報のCPUの行を抽出しようと考えています。

systeminfoコマンドでCPU情報を確認すると、実際のCPU情報は項目名「プロセッサ:」から改行されており、項目名が存在しない行となります。
実際に取得したいCPU名が存在する行数を突き止める事は出来ました(下記コード)が、特定した行数の内容を抽出することが出来ずにおります。

rem システム情報一覧の「プロセッサ:」行の行数を確認 for /f %%f in ('systeminfo ^| findstr /n "プロセッサ:"') do set HitCPUSemifinished=%%f rem 行数を抽出 set HitCPUProvisional= %HitCPUSemifinished:~0,2% rem 実際のCPU情報が記載された行数をセット set /a HitCPU = %HitCPUProvisional% + 1

上記の通り、CPU情報の行数を特定することしか出来ておりません。
本行の内容を抽出する方法を教えて頂けますでしょうか?

宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

バッチでテキスト処理はかなり難易度高いですよ。特定箇所を特定行数だけ処理するとなると、for文一つでは無理です。環境変数を駆使して条件分岐させる必要があります。
目的がCPU情報の取得なら、PowerShellのGet-WmiObject -Class Win32_Processorを使った方が楽だと思います。

あえてバッチでやるとすると、私ならこんな感じにします。

dos

1@echo off 2setlocal ENABLEDELAYEDEXPANSION 3 4set NUMCPU=0 5set PROC=search 6for /F "tokens=1,* delims=: " %%A in ('systeminfo') do call :!PROC! "%%A" "%%B" 7 8echo NUMCPU : %NUMCPU% 9for /L %%A in (1,1,%NUMCPU%) do echo CPU%%A : !CPU%%A! 10goto :eof 11 12:search 13if "%~1" == "プロセッサ" ( 14 set PROC=extract 15 for /F %%A in ('echo %~2') do set NUMCPU=%%A 16 set COUNT=0 17) 18goto :eof 19 20:extract 21set /A COUNT += 1 22set CPU%COUNT%=%~2 23if %COUNT% == %NUMCPU% set PROC=discard 24goto :eof 25 26:discard

投稿2017/11/24 06:29

catsforepaw

総合スコア5938

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

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

dai3922

2017/11/24 07:37

ご回答頂きありがとうございます。 大変参考になりました。高度で理解に時間がかかりますが… アドバイス頂きましたが、これを機にPowerShellも試してみたいと思います。
guest

0

■対応方法
行数を取得する方法ではないのですが、CSV形式にしてCPUのところだけを抜き出す感じでどうでしょうか
※環境によって表示が異なると思いますので、tokens部分は都度修正してください。

for /f "tokens=18-20 delims=," %a in ('systeminfo /FO csv /NH') do echo %a %b %c

■systeminfoの結果
以下のような感じに出力されます。

C:\Users\Administrator>systeminfo /FO CSV /NH "ホスト名","Microsoft Windows Server 2012 R2 Standard 評価版","6.3.9600 N /A ビルド 9600","Microsoft Corporation","スタンドアロン サーバー","Multiprocesso r Free","Windows ユーザー","","00252-10000-XXXXX-XXXXX","2017/06/06, 5:57:17","2 017/11/22, 11:36:39","VMware, Inc.","VMware Virtual Platform","x64-based PC","2 プロセッサインストール済みです。,[01]: Intel64 Family 6 Model 63 Stepping 2 Genu ineIntel ~2397 Mhz,[02]: Intel64 Family 6 Model 63 Stepping 2 GenuineIntel ~2397 Mhz","Phoenix Technologies LTD 6.00, 2015/09/21","C:\Windows","C:\Windows\syste m32","\Device\HarddiskVolume1","ja;日本語","ja;日本語","(UTC+09:00) 大阪、札幌、 東京","6,144 MB","3,545 MB","7,168 MB","4,555 MB","2,613 MB","C:\pagefile.sys"," A","\ホスト名","127 ホットフィックスがインストールされています。,[01]: K B2894852,[02]: KB2894856,[03]: KB2919355,[04]: KB2919442,[05]: KB2934520,[06]: K B2938066,[07]: KB2938772,[08]: KB2949621,[09]: KB2954879,[10]: KB2962806,[11]: K B2966826,[12]: KB2966828,[13]: KB2967917,[14]: KB2968296,[15]: KB2972103,[16]: K B2972213,[17]: KB2973114,[18]: KB2973351,[19]: KB2978122,[20]: KB2989930,[21]: K B3000483,[22]: KB3000850,[23]: KB3003057,[24]: KB3004361,[25]: KB3004365,[26]: K B3008242,[27]: KB3012235,[28]: KB3012702,[29]: KB3013172,[30]: KB3013538,[31]: K B3013791,[32]: KB3013816,[33]: KB3014442,[34]: KB3019978,[35]: KB3022777,[36]: K B3023219,[37]: KB3023266,[38]: KB3024755,[39]: KB3027209,[40]: KB3030377,[41]: K B3032663,[42]: KB3034348,[43]: KB3035126,[44]: KB3037576,[45]: KB3037924,[46]: K B3042058,[47]: KB3042085,[48]: KB3044374,[49]: KB3045685,[50]: KB3045717,[51]: K B3045755,[52]: KB3045999,[53]: KB3046017,[54]: KB3054169,[55]: KB3055323,[56]: K B3055343,[57]: KB3055642,[58]: KB3059316,[59]: KB3059317,[60]: KB3060793,[61]: K B3061512,[62]: KB3071663,[63]: KB3071756,[64]: KB3072307,[65]: KB3074545,[66]: K B3075220,[67]: KB3076895,[68]: KB3076949,[69]: KB3077715,[70]: KB3078405,[71]: K B3080042,[72]: KB3082089,[73]: KB3084135,[74]: KB3086255,[75]: KB3092601,[76]: K B3094486,[77]: KB3097992,[78]: KB3100473,[79]: KB3103709,[80]: KB3108381,[81]: K B3109103,[82]: KB3109560,[83]: KB3109976,[84]: KB3110329,[85]: KB3121918,[86]: K B3122651,[87]: KB3126033,[88]: KB3126434,[89]: KB3126587,[90]: KB3127222,[91]: K B3133043,[92]: KB3133924,[93]: KB3134815,[94]: KB3138378,[95]: KB3138602,[96]: K B3138910,[97]: KB3138962,[98]: KB3139162,[99]: KB3139164,[100]: KB3139398,[101]: KB3139914,[102]: KB3145432,[103]: KB3146723,[104]: KB3146978,[105]: KB3153704,[ 106]: KB3155784,[107]: KB3156059,[108]: KB3159398,[109]: KB3161949,[110]: KB3161 958,[111]: KB3162343,[112]: KB3169704,[113]: KB3172729,[114]: KB3173424,[115]: K B3175024,[116]: KB3178539,[117]: KB3186539,[118]: KB4014505,[119]: KB4014598,[12 0]: KB4025376,[121]: KB4034662,[122]: KB4038806,[123]: KB4040972,[124]: KB404098 1,[125]: KB4048951,[126]: KB4049179,[127]: KB4048958","1 NIC(s) インストール済み です。,[01]: Intel(R) 82574L Gigabit Network Connection, 接続名: Ethernet0, DHCP が有効: いいえ, IP アドレス, [01]: XXX.XXX.XXX. XXX, [02]: XXX.XXX.XXX.XXX, [03]: XXXX::XXXX:XXXX:XXXX:XXXX","ハイパーバ イザーが検出されました。Hyper-V に必要な機能は表示されません。"

投稿2017/11/24 05:11

gitya107

総合スコア706

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

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

dai3922

2017/11/24 07:39

ご回答頂きありがとうございます。 なるほど、この方法ですと一度の参照で複数データを持ってくることが出来ますよね。 実は、systeminfoで他の箇所も参照しているところがあり、時間もかかるので非効率的だなとは思っておりました。 参考にさせて頂きます。 どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問