2017-01-19 6 views
0

Я использую пакетный скрипт для моего компьютера на работе для переключения между двумя прокси-серверами. В настоящее время у меня есть 2 отдельных сценария для каждого из прокси, которые я использую, соответственно, к какому серверу я хочу подключиться.Пакетный скрипт для переключения между двумя прокси

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"^
/v ProxyServer /t REG_SZ /d proxyAddress:port /f 

Оба сценария одинаковы, только адрес отличается. Я хотел бы создать один пакетный файл, который изменяется между двумя сохраненными адресами (если он используется, измените его на другой). Есть ли способ вернуть значение из записи REG_SZ и оценить его на сохраненные значения?

Благодаря

+1

Вы уже используете [ 'reg' команду] (http://ss64.com/nt/reg.html), поэтому вы никогда не считал читать свою помощь (' р /? ') И найти, поддерживает ли он чтение разделов реестра? – aschipfl

ответ

2

Мне нравятся новые линии и vars ;-) и для этого есть шаблон.
Вы должны адаптировать прокси1 и прокси2.

:: ToggleProxy.cmd 
@Echo off 
set "Key=HKCU\Software\Microsoft\Windows\CurrentVersion\Internet 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 
) 
+0

Что это? Cleancode? ATCH? Где, по вашему мнению, мы здесь: P – geisterfurz007

+0

Я пробовал это решение, но он только переключает прокси-сервер, если значение Proxy2 является текущим параметром прокси-сервера (в этом случае это только часть else). Он не переключает его обратно. Затем я изменил 'do if" %% ~ R "equ"% Proxy1 "' to 'do if" %% ~ R "equ" 192.168 ... "', и теперь скрипт работает, как будто что-то не так с переменной Proxy1. Странно, потому что он по-прежнему изменяет значение, хранящееся в переменной Proxy1, правильно, если Proxy2 был текущим прокси, но он не оценил тот же var правильно в строке if. Спасибо в любом случае, это решение работает. – sluz

1

Поскольку новые линии скучно в любом случае (я извиняюсь за вторую строчку ...):

@echo off 
for /f "tokens=3 delims= " %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet 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. Затем вы можете использовать это значение, чтобы проверить, активен ли прокси-сервер или нет, и используйте свою команду выше, чтобы соответствующим образом изменить его.

Объяснение цикла:

Выходной внешний вид запроса, как это для меня:

KEY_ROOT_HERE\PATH\TO\KEY 
Name REG_TYPE VALUE 

Так с findstr REG_SZ мы только получаем нижнюю линию обоих. Затем мы должны взять третью часть строки, разделенную пробелами (см. Начало, где написано "tokens=3 delims= ", а самая длинная часть - это сам запрос, в основном взятый из вашего вопроса.

+0

в строке: если «% currentValue%» == «», если я вхожу в прокси-адрес типа «<192.168 ...: 8080> ничего не происходит, должен ли я вводить здесь двоичные данные или? – sluz

+0

Я не хотел include '<>' он должен был показать, что это переменная часть :) Так что это должно быть 'if"% currentValue% "==" 192.168 ....: 8080 "' – geisterfurz007

+0

да, я новичок в пакетные скрипты, я играл с «до», но даже сейчас, после того как я изменил его на «% currentValue%» == «192.168 ....: 8080», он все равно не переключает прокси (ничего не происходит), когда i выполните сценарий – sluz