• ベストアンサー

[バッチファイル]レジストリ値を取得し、それを条件としてif文動作分岐をする

インターネットオプションのプロキシ設定をバッチファイルでトグルさせようと思ったのですが、思うように動かないのでどなたか助けて頂けないでしょうか。 こちらを参考にさせて頂きました。 http://www.tkssoft.com/cmd/cmd013.html @echo off cls set bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable' if '%bool%'=='0' goto Set_1 if '%bool%'=='1' goto Set_0 :Set_1 reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 1 goto :eof :Set_0 reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 0 goto :eof 明らかにset部分が間違っていると思うのですが、どのように直したらいいのかいろいろ試してみたのですがどうにも解決しませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

『コマンドプロンプト』を起動して、 set bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable' と入力後、 set bool    (←または、echo %bool%) と入力してみてください。単純に、 bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable' と表示されるだけだと思いますョ。 "reg"コマンドの実行結果で分岐させるのでしたら、 reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable を実行すると("Windows XP"の実行結果では)、 ! REG.EXE VERSION 3.0 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings ProxyEnable REG_DWORD 0x0 と画面に表示されますから、これをパイプ(半角の"|")を通して"find"コマンドに送り、"0x0"があるかどうかで、"ERRORLEVEL"を判定すると良いと思います。("find"コマンドは、指定した文字列が見つかれば、"ERRORLEVEL"に0を、見つからなければ1を返します。) 具体的には、 @echo off cls reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable | find "0x0" if %ErrorLevel%==1 goto Set_0 if %ErrorLevel%==0 goto Set_1 :Set_1 reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 1 goto :eof :Set_0 reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 0 goto :eof

yamaimoZ
質問者

お礼

わかりやすい解説ありがとうございます。 なるほど・・言われてみれば返り値をしっかり確認してから試すべきでした。 無事目的動作しました。ありがとうございます。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

forで何とかなるかと。 http://oshiete1.goo.ne.jp/qa4281114.html

参考URL:
http://technet.microsoft.com/ja-jp/library/cc755694.aspx
yamaimoZ
質問者

お礼

forを使った方法も何通りか目にしたのですが、いま一つ使い方がわからなかったところです。 ありがとうございました。

関連するQ&A