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

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

ただいまの
回答率

89.98%

devconを使用したbatファイルについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,333

R_NaKaMa

score 4

前提・実現したいこと

devcon.exeを使用し複数の端末のBluetooth機能をbatファイルから無効にしたいと考えているのですが、for文の中身がうまく動作しない状態です。。
for /f "delims=" %%i in ('devcon.exe hwids ^=Bluetooth')で
1行ずつ取得して、一番長いハードウェアIDを利用したいと考えております。
下記のコードはHardware IDs:とCompatible IDs:の間のIDだけ取得するように記述しております。
初心者のため大変見づらいと思いますが、ご回答いただければ幸いです。

該当のソースコード

@echo off
setlocal enabledelayedexpansion
cd /d %~dp0

set HWID="    Hardware IDs:"
set CPID="    Compatible IDs:"
set flag="OFF"
set result=

for /f "delims=" %%i in ('devcon.exe hwids ^=Bluetooth')do (
  set id=%%i
  call :FlagSet "!id!"
   rem "flag"が"ON"でかつ"id"がHardware IDs:ではない場合
   if !flag!=="ON" if not "!id!"==!HWID! (
       call :Get_Strlen1 "!result!"
       call :Get_Strlen2 "!id!"
       rem "result"より"id"の文字数が多い場合実行
      if !strlen! lss !strlen2! (
           set result="!id!"
      )
   )

)

goto :End

:FlagSet
rem "Hardware IDs"が見つかったらONにする
if %1==%HWID% (
set flag="ON"
)
rem "Compatible IDs"が見つかったらOFFにする
if %1==%CPID% (
set flag="OFF"
)
exit /b


rem "result"の文字数を数える
:Get_Strlen1
set s=%1
set strlen=0
:LOOP_HEAD
if defined s (
set "s=!s:~1!"
set /A strlen=!strlen!+1
goto :LOOP_HEAD
)
exit /b


rem "id"の文字数を数える
:Get_Strlen2
set s2=%1
set strlen2=0
:LOOP_HEAD2
if defined s2 (
set "s2=!s2:~1!"
set /A strlen2=!strlen2!+1
goto :LOOP_HEAD2
)
exit /b

:End
devcon disable !result!

試したこと

課題に対してアプローチしたことを記載してください

補足情報(言語/FW/ツール等のバージョンなど)

devcon.exe hwids ^=Bluetoothの出力内容は以下のようになっています。

USB\VID_04C5&PID_1330\5&1D2C357B&0&11
Name: Generic Bluetooth Adapter
Hardware IDs:
USB\VID_04C5&PID_1330&REV_0001
USB\VID_04C5&PID_1330
Compatible IDs:
USB\Class_e0&SubClass_01&Prot_01
USB\Class_e0&SubClass_01
USB\Class_e0
BTH\MS_BTHBRB\6&2BF38B4D&0&1
Name: Microsoft Bluetooth Enumerator
Hardware IDs:
BTH\MS_BTHBRB
2 matching device(s) found.

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • sa-yu

    2017/11/19 02:08

    `devcon.exe hwids ^=Bluetooth`の出力例があると回答がつきやすくなると思いますよ。今のままだと、devconの出力結果を知っている人しか回答できないので。

    キャンセル

  • R_NaKaMa

    2017/11/20 09:24

    ご指摘ありがとうございます。devcon.exe hwids ^=Bluetoothの出力例を追記しました。

    キャンセル

回答 1

check解決した方法

0

自己解決しました。ありがとうございました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる