質問編集履歴

1 devcon.exe hwids =Bluetoothの出力内容追記

R_NaKaMa

R_NaKaMa score 4

2017/11/20 09:23  投稿

devconを使用したbatファイルについて
###前提・実現したいこと
devcon.exeを使用し複数の端末のBluetooth機能をbatファイルから無効にしたいと考えているのですが、for文の中身がうまく動作しない状態です。。
for /f "delims=" %%i in ('devcon.exe hwids ^=Bluetooth')で
1行取得して、一番長いハードウェアIDを利用したいと考えております。
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.
  • コマンドプロンプト

    551 questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

  • バッチファイル

    383 questions

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

  • Windows

    2055 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る