今回のネタは、自己責任が大前提なんで、「転んでも泣かない覚悟の出来た人だけ」見るように。
そうじゃない人までは、相手に出来ないもの。
@rem switch.batは、ドライバを切り換えるためのバッチファイルである。 @rem 実行する際は、 @rem swtich.bat [x360c|msdrv] [接続しているコントローラーのVID] [同PID] @rem とのかたちとなり、 @rem x360cドライバを有効にしたい場合には、x360cを、 @rem MS製のドライバを有効にしたい場合は、msdrvを指定し、 @rem それに続けて、4桁の十六進数で表現されるVIDとPIDとを指定する。 @echo off setlocal set x360c_inf=c:\X360C\x360c.inf set msdrv_inf=c:\Program Files\Microsoft Xbox 360 Accessories\Xusb21.inf if "%2"=="" goto error if "%3"=="" goto error rem 指定されていた場合は、devconに渡すhwidを作成する。 rem この時、『^&』と記述しているが、このように記述しないと、マルチステーメント演算子と認識されてしまうため。 set device_id=USB\VID_%2^&PID_%3 if "%1"=="x360c" goto x360c if "%1"=="msdrv" goto msdrv goto error rem ここのブロックで、最終的にdevconに渡すinfファイルの在処を設定する。 :x360c if exist C:\Windows\System32\x360cps.dll.bak ren C:\Windows\System32\x360cps.dll.bak x360cps.dll set param_inf=%x360c_inf% goto process :msdrv set dll_check=on set param_inf=%msdrv_inf% :process devcon update "%param_inf%" "%device_id%" echo "%device_id%" rem 確認フラグが設定されていなかったら、終了。されていたら、ファイルの所在を確認して、リネームして終了。 rem ただ、諸般の事情で、dllファイルの改名は、行わないことにしてある。 rem 一種しか接続しない場合は、頭のremをはずして、有効にしても構わない。 if "%dll_check%"=="" goto end rem if exist C:\Windows\System32\x360cps.dll ren C:\Windows\System32\x360cps.dll x360cps.dll.bak goto end :error echo swtich.bat [x360c|msdrv] [接続しているコントローラーのVID] [同PID] :end endlocal pause
なんといいますか、非常に素直な造りとなっております。
その変わり、環境変数を使いまくりなのと、環境変数への操作をこのバッチファイルのみに留めるための指定をかけてること、あと、オプションを受け取るための構文を使っているのが、テンプレートとして公開されてるバッチファイルとは違っている点。
devconを拾ってきて、
setlocalの直後のx360c_infとmsdrv_infとにそれぞれのドライバのinfファイルをフルパスで指定すること。この書き換えが済んだら、準備は終わり。
後は、x360cを使うんだったら、x360cを、MS製のドライバを使う時は、msdrvを指定して、その後に、コントローラーのVIDとPIDとを空白区切りで放り込むという。そんな感じ。
説明が必要なところはほぼ無いと思うけど、環境変数device_idを作る時に『^&』と記述しているのは、「^」で直後の「&」をエスケープしてるんだわ。このことに関しては、devconでの処理が終わった後にバッチファイル無いで使われているdevice_idの内容を表示させているので、確認して欲しいかな、と。
正直、今回のバッチファイルの中で、一番苦労させられた部分のような気がしないでもないんだな、これが。