2017-01-19 71 views
0

我在工作時使用了一個批處理腳本來在兩臺代理服務器之間切換。目前,我有兩個單獨的腳本,用於每個代理,我根據這些代理使用哪個服務器來連接。在兩個代理服務器之間切換的批處理腳本

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)了,所以你有沒有考慮過讀它的幫助('reg /?')和找到它是否支持讀取註冊表項? – aschipfl

回答

2

我喜歡新的線條和增量;-)併爲此提供模板。
您必須修改Proxy1和Proxy2變量。

:: 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?In b ATCH?你認爲我們在哪裏:P – geisterfurz007

+0

我試過這個解決方案,但是如果Proxy2值是當前代理設置(在這種情況下它只做else部分),它只切換代理。它不會切換回來。然後,我改變了'如果'%%〜R「equ」%Proxy1「'變爲'do if」%%〜R「equ」192.168 ...「'現在腳本正常工作,就像變量Proxy1出錯了。奇怪的原因,如果Proxy2是當前代理,它仍會正確更改存儲在Proxy1變量中的值,但它不會在if行中正確評估相同的var。無論如何,感謝這個解決方案。 – 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

在行中:if「%currentValue%」==「」如果我輸入代理地址如「<192.168 ...:8080>什麼也沒有發生,我應該在這裏輸入二進制數據還是嗎? – sluz

+0

我不是故意要包括'<>'它表明這是一個可變的部分:)所以它應該是'if「%currentValue%」==「192.168 ....:8080」' – geisterfurz007

+0

是啊,我很新批處理腳本,我在你的文章之前玩過「」,但即使在我將它改爲「%currentValue%」==「192.168 ....:8080」之後,它仍然不會切換代理(沒有任何反應),當我執行腳本 – sluz