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

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

ただいまの
回答率

91.35%

  • バッチファイル

    131questions

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

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

解決済

回答 2

投稿 2017/11/24 11:56

  • 評価
  • クリップ 0
  • VIEW 73

dai3922

score 16

バッチファイルでシステム情報の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情報の行数を特定することしか出来ておりません。
本行の内容を抽出する方法を教えて頂けますでしょうか?

宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

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

@echo off
setlocal ENABLEDELAYEDEXPANSION

set NUMCPU=0
set PROC=search
for /F "tokens=1,* delims=: " %%A in ('systeminfo') do call :!PROC! "%%A" "%%B"

echo NUMCPU : %NUMCPU%
for /L %%A in (1,1,%NUMCPU%) do echo CPU%%A : !CPU%%A!
goto :eof

:search
if "%~1" == "プロセッサ" (
    set PROC=extract
    for /F %%A in ('echo %~2') do set NUMCPU=%%A
    set COUNT=0
)
goto :eof

:extract
set /A COUNT += 1
set CPU%COUNT%=%~2
if %COUNT% == %NUMCPU% set PROC=discard
goto :eof

:discard

投稿 2017/11/24 15:29

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 16:37

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

    キャンセル

+1

■対応方法
行数を取得する方法ではないのですが、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 14:11

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 16:39

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

    キャンセル

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

ただいまの回答率

91.35%

関連した質問

同じタグがついた質問を見る

  • バッチファイル

    131questions

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