用于在两个代理之间切换的批处理脚本



我在工作时使用批处理脚本在两个代理服务器之间切换。目前,我为每个代理都有 2 个单独的脚本,我根据要连接的服务器使用这些脚本。

reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionInternet Settings" ^
/v ProxyServer /t REG_SZ /d proxyAddress:port /f

两个脚本相同,只是地址不同。我想创建一个在两个存储地址之间更改的批处理文件(如果一个正在使用中,请将其更改为另一个)。有没有办法从REG_SZ条目返回值并将其评估为存储的值?

谢谢

我确实喜欢新行和变量;-)并为此提供模板。
您必须适应 Proxy1 和 Proxy2 var。

:: ToggleProxy.cmd
@Echo off
set "Key=HKCUSoftwareMicrosoftWindowsCurrentVersionInternet Settings"
Set "Val=ProxyServer"
Set "Typ=REG_SZ"
Set "Proxy1=proxyAddress1:port1"
Set "Proxy2=proxyAddress2:port2"
for /f "tokens=3" %%R in (
  'Reg Query "%Key%" /v %Val% ^|find /i "%Val%"'
) do if "%%~R" equ "%Proxy1%" (
   Reg add "%Key%" /v %Val% /t %Typ% /d "%Proxy2%" /f
) else (
   Reg add "%Key%" /v %Val% /t %Typ% /d "%Proxy1%" /f
)

因为反正新行很无聊(对不起第二行......

@echo off
for /f "tokens=3 delims= " %%a in ('reg query "HKCUSoftwareMicrosoftWindowsCurrentVersionInternet Settings" /v ProxyServer /t REG_SZ ^| findstr "REG_SZ"') do set currentValue=%%a
if "%currentValue%"=="<proxySetting1>"(
REM set proxySetting2 here
) ELSE (
REM set proxySetting1 here
)

使用regQuery,您实际上可以搜索键值。需要循环来解析输出并将值读入变量 currentValue 。然后,您可以使用此值检查代理 1 是否处于活动状态,并使用上面的命令相应地更改它。

循环说明:

查询的输出对我来说如下所示:

KEY_ROOT_HEREPATHTOKEY
Name    REG_TYPE    VALUE

因此,对于findstr REG_SZ,我们只能得到两者的下线。然后我们必须取字符串的第三部分,用空格分隔(参见开头,它说"tokens=3 delims= ",最长的部分是查询本身,主要取自你的问题。

感谢user6811411的回答,我创建了一个更"通用"的版本。我修改了可以从命令行注入代理地址的脚本。使其更加通用,您不必对地址进行硬编码(可能是出于安全问题或其他原因)。

像这样使用它: <PATH>switch_proxy.bat proxyVal1 proxyVal2

@Echo off
set "Key=HKCUSoftwareMicrosoftWindowsCurrentVersionInternet Settings"
Set "Val=ProxyServer"
Set "Typ=REG_SZ"
Set "Proxy1=%1"
Set "Proxy2=%2"
for /f "tokens=3" %%R in (
  'Reg Query "%Key%" /v %Val% ^|find /i "%Val%"'
) do if "%%~R" equ "%Proxy1%" (
   Reg add "%Key%" /v %Val% /t %Typ% /d "%Proxy2%" /f
) else (
   Reg add "%Key%" /v %Val% /t %Typ% /d "%Proxy1%" /f
)

最新更新