解决PATH变量污染的问题

文章目录

    • 解决PATH变量污染的问题
    • 概述
    • 笔记
    • 清空PATH变量之后的系统设置
    • 在命令行查看清空后的PATH变量
    • 以 gitea-1.17.1-gogit-windows-4.0-amd64.exe 为例
    • 以系统命令 where为例
    • run_vs2019.bat
    • 备注 - 批处理的后缀最好是bat
    • END

解决PATH变量污染的问题

概述

随着不断安装新软件, 可能多个软件中都有一个同名的被公用的程序。这些同名软件的版本可能并不相同。
不同软件对于公用的程序(e.g. cmake, perl,openssl)的版本要求可能并不一样。
这时, 运行目标软件之前,可能就要调整PATH变量中的条目顺序。否则就可能引起程序运行失败或异常。

还有个问题,PATH变量的最大长度是有限制的。最后可能装不下,导致手工编辑调整PATH变量顺序变得不可能。
虽然有替代方法(e.g. 再整几个环境变量e.g. my_env1, my_env2…, 将路径放进去, 然后将%my_env1%;%my_env2%;放入PATH, 这样PATH变量本身的长度就短了), 这样也不太好, 很乱。

我想到的方法, 直接将PATH变量清空。 自己启动程序时, 写一个.bat, 将目标程序运行的环境变量赋值给PATH, 然后再call目标程序。
这样可以从根子上解决PATH变量污染的问题。
唯一不好的一点是, 目标软件需要啥, 咱不清楚(大概率不清楚), 需要依据软件报错, 才能知道这个软件需要啥PATH变量。

笔记

清空PATH变量之后的系统设置

在这里插入图片描述

在命令行查看清空后的PATH变量

C:\Users\me>echo %path%
%path% // 可以看到, 打印不出有效的path变量的值C:\Users\me>path
PATH=(null) // 可以看到, PATH变量是空的C:\Users\me>

以 gitea-1.17.1-gogit-windows-4.0-amd64.exe 为例

直接运行,会报错, 看报错信息, 知道需要git for windows.
那么就将git的目录加进去(可以事先备份一下自己的原始PATH, 然后根据软件的提示, 从开始菜单中确定是哪个程序, 然后确定程序路径, 再结合备份的原始PATH, 就可以知道该软件需要的依赖程序的PATH路径)。

set PATH=C:\Program Files\Git\cmd;%PATH%
call gitea-1.17.1-gogit-windows-4.0-amd64.exe

调用自己写的bat, 就可以将目标软件正常运行起来。

E:\git_rep_local>run_my_gittea.batE:\git_rep_local>set PATH=C:\Program Files\Git\cmd;E:\git_rep_local>call gitea-1.17.1-gogit-windows-4.0-amd64.exe
2024/03/28 09:25:46 cmd/web.go:106:runWeb() [I] Starting Gitea on PID: 42880
2024/03/28 09:25:46 ...s/setting/setting.go:594:deprecatedSetting() [E] Deprecated fallback `[server]` `LFS_CONTENT_PATH` present. Use `[lfs]` `PATH` instead. This fallback will be removed in v1.18.0
2024/03/28 09:25:46 ...etting/repository.go:290:newRepository() [W] SCRIPT_TYPE "bash" is not on the current PATH. Are 
// ...
2024/03/28 09:25:47 ...xer/stats/indexer.go:85:populateRepoIndexer() [I] Done (re)populating the repo stats indexer with existing repositories
2024/03/28 09:25:47 cmd/web.go:217:listen() [I] [6604c71b-37] Listen: http://0.0.0.0:3000
2024/03/28 09:25:47 cmd/web.go:221:listen() [I] [6604c71b-37] AppURL(ROOT_URL): http://localhost:3000/
2024/03/28 09:25:47 cmd/web.go:224:listen() [I] [6604c71b-37] LFS server enabled
2024/03/28 09:25:47 ...s/graceful/server.go:61:NewServer() [I] [6604c71b-37] Starting new Web server: tcp:0.0.0.0:3000 on PID: 42880
// 到此, 自己的gitea已经正常运行起来了。

以系统命令 where为例

因为没有PATH环境变量了,直接打开cmd, 会找不到where命令。

C:\Users\me>where
'where' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

这时, 可以自己写个bat,将需要的PATH值加上, 就可以正常调用系统中的命令。

set PATH=C:\Windows\System32;
call cmd

双击自己的bat或者在cmd命令行中手工运行自己的bat都是一样的。

Microsoft Windows [版本 10.0.19045.3570]
(c) Microsoft Corporation。保留所有权利。C:\Users\me>cd /d D:\my_dev\cmd_envD:\my_dev\cmd_env>dir驱动器 D 中的卷没有标签。卷的序列号是 36AD-51CED:\my_dev\cmd_env 的目录2024/03/28  10:06    <DIR>          .
2024/03/28  10:06    <DIR>          ..
2024/03/27  16:36                41 x64_cmd.bat1 个文件             41 字节2 个目录 438,445,146,112 可用字节D:\my_dev\cmd_env>x64_cmd.batD:\my_dev\cmd_env>set PATH=C:\Windows\System32;D:\my_dev\cmd_env>call cmd
Microsoft Windows [版本 10.0.19045.3570]
(c) Microsoft Corporation。保留所有权利。D:\my_dev\cmd_env>where /?WHERE [/R dir] [/Q] [/F] [/T] pattern...描述:显示符合搜索模式的文件位置。在默认情况下,搜索是在当前目录和 PATH环境变量指定的路径中执行的。参数列表:/R       从指定目录开始,递归性搜索并显示符合指定模式的文件。/Q       只返回退出代码,不显示匹配文件列表。(安静模式)匹配文件。(安静模式)/F       显示所有相配文件并用双引号括上。/T       显示所有相配文件的文件的文件。pattern  指定要匹配的文件的搜索模式。通配符 * 和 ? 可以用在模式中。也可以指定 "$env:pattern""path:pattern" 格式; 其中"env" 是环境变量,搜索是在 "env" 变量的指定的路径中执行的。这些格式不应该跟 /R 一起使用。此搜索也可以用将 PATHEXT 变量扩展名附加于此模式的方式完成。/?      显示此帮助消息。注意: 如果搜索成功,此工具返回错误级别 0; 如果不成功,返回 1; 如果失败或发生错误,返回 2。示例:WHERE /?WHERE myfilename1 myfile????.*WHERE $windir:*.*WHERE /R c:\windows *.exe *.dll *.batWHERE /Q ??.???WHERE "c:\windows;c:\windows\system32:*.dll"WHERE /F /T *.dllD:\my_dev\cmd_env>
// 可以看到, where命令可以正常运行了

run_vs2019.bat

@echo off
:: run_vs2019.bat
TITLE run_vs2019.batset PATH=C:\Windows\system32;C:\Windows;C:\Program Files\Eclipse Foundation\jdk-8.0.302.8-hotspot\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\devenv.exe"

备注 - 批处理的后缀最好是bat

看pathext变量

C:\Users\me>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW;.RB;.RBW

可知,如果是可执行程序, 那么文件后缀名称的优先级顺序为 .COM > .EXE > .BAT > .CMD
所以,如果要写批处理, 最好后缀名为.bat, 这样比.cmd优先级高一些

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/576958.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Kaggle API快速下载Kaggle数据集

前言 在使用Kaggle网站下载数据集时&#xff0c;直接在网页上点击下载可能会很慢&#xff0c;甚至会出现下载失败的情况。本文将介绍如何使用Kaggle API快速下载数据集。 具体步骤 安装Kaggle API包 在终端中输入以下命令来安装Kaggle API相关的包&#xff1a; pip install…

查询优化-提升子查询-UNION类型

瀚高数据库 目录 文档用途 详细信息 文档用途 剖析UNION类型子查询提升的条件和过程 详细信息 注&#xff1a;图片较大&#xff0c;可在浏览器新标签页打开。 SQL: SELECT * FROM score sc, LATERAL(SELECT * FROM student WHERE sno 1 UNION ALL SELECT * FROM student…

快速上手Spring Cloud 六:容器化与微服务化

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

华为防火墙配置指引超详细(包含安全配置部分)以USG6320为例

华为防火墙USG6320 华为防火墙USG6320是一款高性能、高可靠的下一代防火墙,适用于中小型企业、分支机构等场景。该防火墙支持多种安全功能,可以有效抵御网络攻击,保护网络安全。 目录 华为防火墙USG6320 1. 初始配置 2. 安全策略配置 3. 防火墙功能配置 4. 高可用性配…

网站业务对接DDoS高防

准备需要接入的网站域名清单&#xff0c;包含网站的源站服务器IP&#xff08;仅支持公网IP的防护&#xff09;、端口信息等。所接入的网站域名必须已完成ICP备案。如果您的网站支持HTTPS协议访问&#xff0c;您需要准备相应的证书和私钥信息&#xff0c;一般包含格式为.crt的公…

系统开发实训小组作业week5 —— 用例描述与分析

目录 4.3 UC003电影浏览与查询 4.3.1 用例描述 4.3.2 活动图 4.3.3 界面元素 4.3.4 功能 4.4 UC004在线订票 4.4.1 用例描述 4.4.2 活动图 4.4.3 界面元素 4.4.4 功能 4.3 UC003电影浏览与查询 4.3.1 用例描述 用例号 UC003-01 用例名称 电影浏览与查询 用例描述…

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现PSO-TCN-BiGRU-Attention粒子群算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述…

改Jenkins版本号

旧服务器迁移到新&#xff0c;打包版本号更新 Jenkins.instance.getItemByFullName("双机热备").updateNextBuildNumber(65)

安卓国内ip代理app,畅游网络

随着移动互联网的普及和快速发展&#xff0c;安卓手机已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;由于地理位置、网络限制或其他因素&#xff0c;我们有时需要改变或隐藏自己的IP地址。这时&#xff0c;安卓国内IP代理App便成为了一个重要的工具。虎观代理…

fpga 通过axi master读写PS侧DDR的仿真和上板测试

FPGA和ARM数据交互是ZYNQ系统中非常重要的内容。PS提供了供FPGA读写的AXI-HP接口用于两者的高速通信和数据交互。一般的&#xff0c;我们会采用AXI DMA的方式去传输数据&#xff0c;DMA代码基本是是C编写&#xff0c;对于FPGA开发者来说不利于维护和debug。本文提供一种手写AXI…

GK7202V330国科微 GK7202RNCFV330 GOKE

GK7202V330 芯片是国科针对消费类 Camera 市场推出的支持 ISP 和 H.265 编码的新一代消费类 Camera SOC 芯 片。 该芯片集成专用的 ISP&#xff0c;拥有高效的视频编码处理性能&#xff0c;支持 H.265 编码&#xff0c;满足客户各种差异化业务需求。集 成了 RTC、POR、Audio …

TOP100-回溯(二)

4.39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制…