バッチファイルできたー

今回のネタは、自己責任が大前提なんで、「転んでも泣かない覚悟の出来た人だけ」見るように。
そうじゃない人までは、相手に出来ないもの。

@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の内容を表示させているので、確認して欲しいかな、と。
正直、今回のバッチファイルの中で、一番苦労させられた部分のような気がしないでもないんだな、これが。