在 Windows 中开启 Clash 后浏览器能联网但终端却经常超时,本质原因是大多数开发工具只读取 HTTP_PROXY/HTTPS_PROXY 环境变量而不会使用系统代理。本文通过一个 PowerShell 脚本实现类似 Linux proxy-on / proxy-off 的一键开关,让 pip、git、npm、Python 等终端程序自动走代理。

目标: 像 Linux 一样在终端执行

proxy-on
proxy-off
proxy-status

来控制全局代理(适用于 pip / git / curl / Python / Node 等)

一、脚本实现

1、查看端口号

首先打开你的Clash For Windows,查看你的端口号

端口号

2、创建脚本文件

这边建议新建个文件夹proxy专门存储本blog所需文件

创建文件proxy.ps1

这里建议使用vscode打开此文件,然后按ctrl+shift+p打开运行命令窗口,根据下图顺序操作

命令窗口1

命令窗口2

命令窗口3

注:因为powershell的中文编码格式为GBK,所以正常的utf-8格式的中文在powershell里面输出会变成乱码

proxy.ps1文件内输入以下代码(注意代理地址后面的端口号填写自己的端口号):

param(
    [Parameter(Mandatory=$true)]
    [ValidateSet("on","off","status")]
    [string]$cmd
)

# 设置 PowerShell 输出为 UTF-8(避免 Unicode 乱码)
$OutputEncoding = [System.Text.UTF8Encoding]::new()

# 代理地址(根据你的 Clash 配置修改端口)
$proxy_url = "http://127.0.0.1:端口号"

# 默认 User 级
$target = [EnvironmentVariableTarget]::User

switch ($cmd) {
    "on" {
        [Environment]::SetEnvironmentVariable("HTTP_PROXY", $proxy_url, $target)
        [Environment]::SetEnvironmentVariable("HTTPS_PROXY", $proxy_url, $target)
        Write-Host "[INFO] 全局代理已开启:$proxy_url"
        Write-Host "       请重启终端或 VSCode 以生效。"
    }
    "off" {
        [Environment]::SetEnvironmentVariable("HTTP_PROXY", $null, $target)
        [Environment]::SetEnvironmentVariable("HTTPS_PROXY", $null, $target)
        Write-Host "[INFO] 全局代理已关闭"
        Write-Host "       请重启终端或 VSCode 以生效。"
    }
    "status" {
        $http = [Environment]::GetEnvironmentVariable("HTTP_PROXY", $target)
        $https = [Environment]::GetEnvironmentVariable("HTTPS_PROXY", $target)

        if ([string]::IsNullOrEmpty($http) -and [string]::IsNullOrEmpty($https)) {
            Write-Host "[STATUS] 系统代理未设置 (HTTP_PROXY / HTTPS_PROXY 为空)"
        } else {
            Write-Host "[STATUS] 当前系统代理:"
            Write-Host "  HTTP_PROXY  = $http"
            Write-Host "  HTTPS_PROXY = $https"
        }
    }
}

创建Windows运行脚本

以下文件不需要像proxy.ps1文件一样换编码格式

创建proxy-on.bat文件,输入以下代码:

@echo off
powershell -ExecutionPolicy Bypass -File "%~dp0proxy.ps1" on

创建proxy-off.bat文件,输入以下代码:

@echo off
powershell -ExecutionPolicy Bypass -File "%~dp0proxy.ps1" off

创建proxy-status.bat文件,输入以下代码:

@echo off
powershell -ExecutionPolicy Bypass -File "%~dp0proxy.ps1" status

二、添加进环境变量

先复制目录路径(比如我将文件都放在下面图片中的目录,那我直接复制该路径即可)

目录

按键盘快捷键win+r打开运行窗口

输入sysdm.cpl打开系统属性窗口,随后依次点击:高级→环境变量→找到“系统变量”里面的PATH,选中并点击“编辑”→点击“新建”,将复制的目录粘贴,然后点击“确定”即可

环境变量1

环境变量2

环境变量3

环境变量4

三、使用效果

命令如下(在任意终端均可使用,且修改为全局,不会因终端关闭而取消修改

proxy-on		#打开代理
proxy-off		#关闭代理
proxy-status		#查看代理状态

使用效果如下图所示(执行速度跟电脑性能有关):

使用效果

注:因为此代理是全局性的,所以日常使用过程中若出现网速过慢,可检查系统是否还处于代理状态

Updated: