###前提・実現したいこと
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.
回答1件
あなたの回答
tips
プレビュー