【问题标题】:Batch File to disable internet options proxy server禁用 Internet 选项代理服务器的批处理文件
【发布时间】:2013-08-26 08:00:40
【问题描述】:

Windows 中,我想使用批处理脚本禁用 Internet 选项 中的代理服务器设置。 我可以使用什么命令来执行此操作?

如果不确定我指的是什么,请参阅

Internet Properties > Connections > LAN Settings >Proxy Server

谢谢

【问题讨论】:

  • 这是另一个非常有趣和绝妙的方法来切换设置,同时更新你的图标以指示设置,比如一个小的桌面应用程序/按钮或其他东西:stackoverflow.com/a/26708451/4561887

标签: windows batch-file internet-options


【解决方案1】:

它在注册表中,[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]

您可以在 BAT 中使用 REG 命令,或准备几个 .REG 文件,以自动进行更改。

例如,要禁用代理,请尝试

REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f

【讨论】:

  • 我在 bat 文件中尝试了这个命令:reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f 现在我猜它正在成功更改 reg 值,但我无法打开我应该能够打开的某些页面。当我在 chrome 中打开首选项时,代理确实被禁用了。
  • 为了清楚起见,这就是我所做的,我运行 bat,我尝试刷新页面(chrome 已经打开!它引发代理错误),我打开首选项并看到代理已经禁用,我这次重新刷新页面加载的页面。
  • 显然,它确实取消了 Internet 设置中的代理复选框,但系统不接受更改。它“直观地”取消选中它,但仍需要触发该选项(就像您单击“接受”按钮一样)。
  • 请注意,通过修改注册表不会立即更新代理设置!这种可行的选择是使用wininet.dll API。您可以在IE Enable/Disable Proxy Settings via Registry answered by @user6730445 或下面的@YOUNG answered on Sep 19 '19 中看到这样的powershell 实现。
【解决方案2】:

2021 年 5 月 25 日更新:现在从我的 GitHub 存储库获取图标和最新脚本:Windows_Proxy_Toggler。也可以在那里查看超级简单的安装说明。


这是一种使用简单 .vbs 脚本作为“小部件”类型桌面快捷方式的方法。第一次要运行脚本时,请单击您创建的 .vbs 文件。这将自动为您生成一个带有适当图标的桌面快捷方式。此后每次单击快捷方式时,它都会切换代理设置,会弹出一个 1 秒的定时弹出框,告诉您代理现在是 ON 还是 OFF,然后更改用于指示新代理状态的 ON 或 OFF 符号的快捷方式图标。

文件:“C:\Users\YOUR_USERNAME\Proxy Settings\toggle_proxy_on_off.vbs”

'Toggle your Proxy on and off 
'Gabriel Staples - www.ElectricRCAircraftGuy.com
'Written: 21 June 2017 
'Updated: 25 June 2017 
'References: 
' 1) https://stackoverflow.com/a/27092872/4561887 
' 2) https://stackoverflow.com/a/26708451/4561887 
' Timed message boxes:
' - *****https://technet.microsoft.com/en-us/library/ee156593.aspx
' - https://stackoverflow.com/questions/14105157/automatically-close-msgbox-in-vbscript
' Debug output:
' - ex: Wscript.Echo "here is your message"

Option Explicit 

'Variables & Constants:
Dim ProxySettings_path, VbsScript_filename 
ProxySettings_path = "C:\Users\Gabriel\Proxy Settings"
VbsScript_filename = "toggle_proxy_on_off.vbs"
Const MESSAGE_BOX_TIMEOUT = 1 'sec; change this value to set how long the message box displays when you toggle the proxy setting 
Const PROXY_OFF = 0

Dim WSHShell, proxyEnableVal, username 
Set WSHShell = WScript.CreateObject("WScript.Shell")
'get the username string for use in path names, since trying to use the "%USERNAME%" variable directly in path names throws an error
username = WSHShell.ExpandEnvironmentStrings("%USERNAME%") 

'Determine current proxy setting and toggle to opposite setting
proxyEnableVal = wshshell.regread("HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable")
If proxyEnableVal = PROXY_OFF Then 
  TurnProxyOn
Else
  TurnProxyOff
End If

'Subroutine to Toggle Proxy Setting to ON
Sub TurnProxyOn 
  'turn proxy on via a registry entry 
  WSHShell.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 1, "REG_DWORD"
  'create/update desktop shortcut 
  CreateOrUpdateDesktopShortcut("on")
  'notify user via an auto-timed popup box 
  WSHShell.Popup "Internet proxy is now ON", MESSAGE_BOX_TIMEOUT, "Proxy Settings"
End Sub

'Subroutine to Toggle Proxy Setting to OFF
Sub TurnProxyOff 
  'turn proxy off via a registry entry 
  WSHShell.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 0, "REG_DWORD"
  'create/update desktop shortcut 
  CreateOrUpdateDesktopShortcut("off")
  'notify user via an auto-timed popup box 
  WSHShell.Popup "Internet proxy is now OFF", MESSAGE_BOX_TIMEOUT, "Proxy Settings"
End Sub

'Subroutine to create or update a shortcut on the desktop 
Sub CreateOrUpdateDesktopShortcut(onOrOff)
  'create a shortcut 
  Dim shortcut, iconStr
  Set shortcut = WSHShell.CreateShortcut("C:\Users\" + username + "\Desktop\Proxy On-Off.lnk")
  'Set the target path (target file) to run when the shortcut is clicked 
  shortcut.TargetPath = ProxySettings_path + "\" + VbsScript_filename
  'Set the working directory. This is necessary in case you ever make this shortcut call a batch (.bat) file, for instance, which in turn calls a .vbs script. In order to know where the .vbs script file/command is located, the shortcut must be operating in the working directory where the .vbs scripts are located. Otherwise, calls to the .vbs scripts from a .bat file this shortcut points to, for instance, won't work since their directories are not in the Windows %PATH% variable, and you'll get an error which states: "'name_of_vbs_script_file' is not recognized as an internal or external command, operable program or batch file."
  shortcut.WorkingDirectory = ProxySettings_path 
  'Set the icon to associate with this shortcut 
  If onOrOff = "on" Then
    iconStr = "on.ico"
  ElseIf onOrOff = "off" Then
    iconStr = "off.ico"
  End If 
  shortcut.IconLocation = ProxySettings_path + "\Icons\" + iconStr
  'Save the shortcut 
  shortcut.Save
End Sub 

说明:

  1. 创建一个名为“C:\Users\YOUR_USERNAME\Proxy Settings”的文件夹
  2. 在该文件夹中创建“toggle_proxy_on_off.vbs”文件,如上所示。
  3. 在此处创建一个“Icons”文件夹:“C:\Users\YOUR_USERNAME\Proxy Settings\Icons”
  4. 下载以下两个 .png 图像(更新:死链接——现在从my GitHub repo 获取图标和脚本):
  5. 例如,使用http://icoconvert.com/ 将这些图像转换为图标(.ico 文件)。选择文件(从上面选择一个 .png)-> 上传 -> 选择“ICO for Windows 7, Windows 8, Vista and XP”格式 -> 点击“转换 ICO” -> 点击“下载您的图标(s )"
    • 将 ON 图标另存为“C:\Users\YOUR_USERNAME\Proxy Settings\Icons\on.ico”
    • 将 OFF 图标另存为“C:\Users\YOUR_USERNAME\Proxy Settings\Icons\off.ico”
  6. 现在,双击“C:\Users\Gabriel\Proxy Settings\toggle_proxy_on_off.vbs”文件运行它。它将自动在您的桌面上创建一个“代理开关”快捷方式文件,并带有相应的图标来指示代理是打开还是关闭。

从此时开始,只需直接点击“代理开关”桌面快捷方式即可开启和关闭代理。

这是代理关闭时的样子:

这是代理开启时的样子:

这是一个 1 秒弹出窗口的示例,当您单击快捷方式图标以打开/关闭代理时,该窗口就会出现。

参考资料:

  1. Batch File to disable internet options proxy server
  2. Windows desktop widget to turn proxy on and off
  3. 定时消息框:

待办事项:

有人可以帮我弄清楚如何通过让它每次都更改图标名称来进一步增强这一步骤吗?--即:不要在快捷方式上说“代理开关”,而是拥有它根据其当前状态说“代理已开启”或“代理已关闭”。我不知道如何更进一步,我现在已经投入了足够的时间.. .

【讨论】:

  • 需要更正。在username = WSHShell.ExpandEnvironmentStrings("%USERNAME%") 行下添加行:ProxySettings_path = "C:\Users\" + username + "\Proxy Settings" 并删除硬编码路径。
  • 我希望这是一个可下载的 .exe 或类似文件。至少有一个 github 吗?
  • @afxentios,谢谢!很棒的发现!我现在在我的 GitHub 存储库上修复了它(链接在我的答案顶部)。
  • @Gulzar,完成!我刚刚为它制作了一个 GitHub 存储库。请参阅我的答案顶部的链接和here。 .vbs 脚本是可执行的,因此您只需将我的 repo 下载到您的根用户文件夹中,然后双击脚本以“安装”并运行它。就是这样!它会自动添加桌面图标。从那时起,您只需双击它创建的桌面图标。注意:我根本不再使用 Windows,所以请尽快测试并告诉我它是否有效。
【解决方案3】:

使用 .vbs 开启代理 onoff

此 .vbs MS 脚本确定当前代理设置并切换到相反设置 如果您想打开和关闭代理,非常方便

Option Explicit 
Dim WSHShell, strSetting
Set WSHShell = WScript.CreateObject("WScript.Shell")

'Determine current proxy setting and toggle to oppisite setting
strSetting = wshshell.regread("HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable")
If strSetting = 1 Then 
NoProxy
Else Proxy
End If

'Subroutine to Toggle Proxy Setting to ON
Sub Proxy 
WSHShell.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 1, "REG_DWORD"
End Sub

'Subroutine to Toggle Proxy Setting to OFF
Sub NoProxy 
WSHShell.regwrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 0, "REG_DWORD"
End Sub

【讨论】:

  • 在 Windows 8.1 中不适合我。不知道为什么。当我单击我的 .vbs 文件时,什么也没有发生,而且我不知道如何让它在命令提示符下打开或进行任何调试。我看不到任何错误。
  • 更新:它确实有效...代理更改只需约 10 秒即可生效,它不会在 Internet 选项中实时更新 --> “连接”选项卡--> 当您从任何脚本更改设置时,“LAN 设置”对话框将生效。
  • 另外,这是另一个非常有趣和绝妙的方法来切换设置,同时更新你的图标以指示设置,比如一个小的桌面应用程序/按钮或其他东西:stackoverflow.com/a/26708451/4561887
  • @BOB,我更进一步。在这里查看我的答案:stackoverflow.com/a/44752679/4561887。我让它创建一个桌面快捷方式并根据代理状态修改图标,以及每次单击桌面快捷方式时都会弹出一个 1 秒的定时弹出窗口来宣布新状态。谢谢你的工作。你是等式的一半。
  • 有什么方法可以通过注册表勾选或取消勾选“使用自动配置脚本”?
【解决方案4】:

Internet Explorer 和 Google chrome 共享相同的代理设置。因此,如果我们更改 Internet Explorer 中的设置,那么它也会影响 Google chrome。我们可以从 CMD(命令行提示符)更改代理设置。

禁用代理设置:

@ECHO OFF

REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f

启用代理设置:

@ECHO OFF

REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f

REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d address:portNumber /f

address:新代理地址
portNumber:端口号

将命令保存在批处理文件中并执行。它将禁用/启用浏览器的代理设置。

我在以下位置找到了这个答案:http://langbasics.blogspot.in/2012/11/disable-or-enable-proxy-for-internet.html

【讨论】:

  • 虽然这会更改设置,但在我打开属性并单击“确定”之前,该设置不会对我产生影响。如何让它们真正生效?
【解决方案5】:

禁用代理

REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet 设置" /v ProxyEnable /t REG_DWORD /d 0 /f

启用代理

reg 添加 "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet 设置" ^ /v ProxyEnable /t REG_DWORD /d 1 /f

设置代理

reg 添加 "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet 设置" ^ /v 代理服务器 /t REG_SZ /d 代理服务器IP:端口 /f

【讨论】:

    【解决方案6】:

    感谢@Gabriel Staples 的回答 https://stackoverflow.com/a/44752679/6070417

    按照步骤做,

    但有两点需要注意:

    1,就像@afxentios 在评论中所说:

    需要更正。在 username = >WSHShell.ExpandEnvironmentStrings("%USERNAME%") 行下添加 ProxySettings_path = "C:\Users\" + username + >"\Proxy Settings" 行并删除硬编码路径。

    修复步骤

    a) 将这一行放到 toggle_proxy_on_off.vbs 的第 26 行下:

    ProxySettings_path = "C:\Users\" + username + "\Proxy Settings"
    

    b) 删除第 18 行 ProxySettings_path = "C:\Users\Gabriel\Proxy Settings"

    2,您会看到该脚本确实更新了注册表,但在您打开/关闭 IE 一次之前它不会起作用。所以我在这里找到了答案:https://stackoverflow.com/a/39079005/6070417

    修复步骤

    a) 复制脚本并保存到 Refresh-System.ps1

    function Refresh-System
    {
      $signature = @'
    [DllImport("wininet.dll", SetLastError = true, CharSet=CharSet.Auto)]
    public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
    '@
    
    $INTERNET_OPTION_SETTINGS_CHANGED   = 39
    $INTERNET_OPTION_REFRESH            = 37
    $type = Add-Type -MemberDefinition $signature -Name wininet -Namespace pinvoke -PassThru
    $a = $type::InternetSetOption(0, $INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)
    $b = $type::InternetSetOption(0, $INTERNET_OPTION_REFRESH, 0, 0)
    return $a -and $b
    }
    Refresh-System
    

    b) 将文件 Refresh-System.ps1 放入“C:\Users\YOUR_USERNAME\Proxy Settings”

    c) 将此行添加到“End If”下的 toggle_proxy_on_off.vbs(大约第 35 行)

    WSHShell.run("powershell -windowstyle hidden -file """ + ProxySettings_path + "\Refresh-System.ps1""")
    

    脚本可以在没有 IE 的情况下运行。

    .

    但是现在当vbs脚本调用powershell脚本时,powershell窗口会出现一小会儿。

    谁知道如何设置powershell窗口从不显示?请添加评论。

    【讨论】:

    • 如何把上面的函数变成一行?我想在批处理文件中运行它powershell.exe -Command "stmnt1; stmnt2; ..."
    • @Unknown123 也许你可以使用分号,看这个答案:stackoverflow.com/a/22258701/6070417
    • 我尝试以powershell -command "$signature = @'[DllImport("wininet.dll", SetLastError = true, CharSet=CharSet.Auto)]public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);'@; $INTERNET_OPTION_SETTINGS_CHANGED = 39; $INTERNET_OPTION_REFRESH = 37; $type = Add-Type -MemberDefinition $signature -Name wininet -Namespace pinvoke -PassThru; $a = $type::InternetSetOption(0, $INTERNET_OPTION_SETTINGS_CHANGED, 0, 0); $b = $type::InternetSetOption(0, $INTERNET_OPTION_REFRESH, 0, 0);"的身份加入他们
    • 但是它返回了一个错误,它说括号[是罪魁祸首。 At line:1 char:16 + $signature = @'[DllImport(wininet.dll, SetLastError = true, CharSet=C ... + ~ No characters are allowed after a here-string header but before the end of the line. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordEx ception + FullyQualifiedErrorId : UnexpectedCharactersAfterHereStringHeader它很高
    • 我是 powershell 新手,还不了解 @' '@statement stackoverflow.com/q/363884/6458107
    【解决方案7】:

    我编写了一个带有“启用/禁用代理”选项的脚本,并以管理员身份启动。你只需要将它复制到一个file.bat:

    @echo off
    REM  --> Check for permissions
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
    REM --> If error flag set, we do not have admin.
    if '%errorlevel%' NEQ '0' (
        echo Requesting administrative privileges...
        goto UACPrompt
    ) else ( goto gotAdmin )
    :UACPrompt
        echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
        "%temp%\getadmin.vbs"
        exit /B
    :gotAdmin
        if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
        pushd "%CD%"
        CD /D "%~dp0"
    :--------------------------------------
    
    
    @echo off
    Setlocal EnableDelayedExpansion
    
    
    :MAIN_M
    ECHO
    ECHO 
    
    ECHO 0. QUIT
    ECHO 1. ENABLE PROXY 10.10.10.10:8181
    ECHO 2. DISABLE PROXY
    
    
    set /p choice=CHOISE....    
    
    
    if ´%choice%´==´0´ goto EXIT_M
    if ´%choice%´==´1´ goto ENABLE_PROXY
    if ´%choice%´==´2´ goto DISABLE_PROXY
    
    :EXIT_M
    exit
    
    :DISABLE_PROXY
    REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
    goto MAIN_M
    
    :ENABLE_PROXY
    REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
    REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d 10.10.10.10:8181 /f
    goto MAIN_M   
    

    【讨论】:

      【解决方案8】:

      试试这个禁用代理。 PA 接受的答案会更改注册表中的值,但要使更改生效,如 cmets 中所述,必须重新启动 IE。

      将下一个内容保存为 cmd- 或 bat-file 并运行它:

      REM turn off proxy server setting
      reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
      
      REM restart IE for changes to take effect
      start /w /b iexplore.exe
      taskkill /f /im iexplore.exe
      

      如果您想将代理切换为“开启”(或 1),您可以这样做:

      REM turn on proxy server setting
      reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
      
      REM you would likely also want to specify your proxy server and port 
      reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d ADDRESS:PORT /f
      
      REM restart IE for changes to take effect
      start /w /b iexplore.exe
      taskkill /f /im iexplore.exe
      

      这是在 Windows 7 和 Windows 10 上检查的。查看更多 herehere

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多