解决PATH变量污染的问题

文章目录

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

E:\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_env

D:\my_dev\cmd_env>dir
 驱动器 D 中的卷没有标签。
 卷的序列号是 36AD-51CE

 D:\my_dev\cmd_env 的目录

2024/03/28  10:06    <DIR>          .
2024/03/28  10:06    <DIR>          ..
2024/03/27  16:36                41 x64_cmd.bat
               1 个文件             41 字节
               2 个目录 438,445,146,112 可用字节

D:\my_dev\cmd_env>x64_cmd.bat

D:\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 *.bat
    WHERE /Q ??.???
    WHERE "c:\windows;c:\windows\system32:*.dll"
    WHERE /F /T *.dll

D:\my_dev\cmd_env>
// 可以看到, where命令可以正常运行了

备注 - 批处理的后缀最好是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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flowable-ui后台显式非中文

把flowable-ui的war包发布后&#xff0c;后台界面显示的是非中文 用的是6.7.2版本&#xff0c;经过了解该版本是有国际化配置文件的&#xff0c;支持中文 猜测可能是浏览器语言导致未显示中文&#xff0c;在控制台输入navigator.language&#xff0c;查看到果然是英文 解决方案…

C++ 之多态虚函数原理及应用

文章目录 多态基本概念和原理虚函数的基本原理和概念虚析构和纯虚析构多重继承中的虚函数小结 多态基本概念和原理 多态的基本概念 **多态是C面向对象三大特性之一** 多态的定义 多态是一种面向对象编程概念&#xff0c;指同一个行为&#xff08;方法&#xff09;在不同的对象上…

LinkWeChat任意文件读取(CVE-2024-0882)

0x01 前言 LinkWeChat 是基于企业微信的开源 SCRM 系统&#xff0c;是企业私域流量管理与营销的综合解决方案。不仅集成了企微强大的后台管理及基础的客户管理功能&#xff0c;而且提供了多种渠道、多个方式连接微信客户。主要运用于电商、零售、教育、金融、政务等服务行业领…

【41-60】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【41-60】计算机网络基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用41、使用 Session 的过程是怎样的&#xff1f;42、Session和cookie应该如何去选择&#xff08;适…

【Vue3】实现二维码、链接 分享功能

界面效果: 描述 要实现的功能分别是 1.复制链接可以将次链接分享给他人&#xff0c;他人依靠链接便可以打开你想要让他看到的数据 2.通过微信扫一扫&#xff0c;便可看到和链接一样的内容在手机端 需要的依赖 二维码:qrcode 复制功能:vue-clipboard3 下载二维码:html2canv…

C语言实现顺序表(增,删,改,查)

目录 一.概念&#xff1a; 1.静态顺序表&#xff1a;使用定长数组存储元素。 2.动态顺序表&#xff1a;使用动态开辟的数组存储。 二.顺序表的实现: 1.顺序表增加元素 1.检查顺序表 2.头插 3.尾插 2.顺序表删除元素 1.头删 2.尾删 3.指定位置删 3.顺序表查找元素 …

NSString有哪些创建对象的方法?创建的对象分别存储在什么区域?

NSString有哪些创建对象的方法&#xff1f;创建的对象分别存储在什么区域&#xff1f; 一般通过NSString创建对象的方法有&#xff1a; NSString *string1 "123";NSString *string2 [[NSString alloc] initWithString:"123"];NSString *string3 [NSSt…

Java设计模式—备忘录模式(快照模式)

定义 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤&#xff0c;当新的状态无效或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原&#xff0c;很多软件都提供了撤销&#xff08;Undo&#xff09;操作&#…

白酒:浓香型白酒的典型代表与特点

云仓酒庄的豪迈白酒作为白酒的品牌&#xff0c;具有一系列与众不同的特点和优势。下面云仓酒庄的豪迈白酒将从典型性、品质、口感和包装等方面深入分析白酒的特点&#xff0c;以及它如何体现浓香型白酒的魅力。 浓香型白酒是中国白酒的重要分支&#xff0c;以浓郁的香味和与众不…

设计模式之原型模式讲解

原型模式本身就是一种很简单的模式&#xff0c;在Java当中&#xff0c;由于内置了Cloneable 接口&#xff0c;就使得原型模式在Java中的实现变得非常简单。UML图如下&#xff1a; 我们来举一个生成新员工的例子来帮助大家理解。 import java.util.Date; public class Employee…

SI案例分享--冷却液对PCIe链路性能的影响

目录 0 引言 1 PCIe线缆组件在不同冷却方式中的性能对比 1.1 配置Paddle card互连的电缆组件测试结果&#xff08;cable-1&#xff09; 1.2 直接焊接互连的电缆组件测试结果&#xff08;cable-2&#xff09; 1.3 一侧配置Paddle card、一侧直接焊接互连的电缆组件测试结果…

阿里云账号怎么注册?看这一篇就够了

阿里云账号怎么注册&#xff1f;阿里云账号支持手机号注册、阿里云APP注册、淘宝、支付宝和钉钉多种注册方式&#xff0c;账号注册后需要通过实名认证才可以购买或使用云产品&#xff0c;使用淘宝、支付宝或钉钉注册方式可以免去实名认证步骤&#xff0c;阿里云百科aliyunbaike…

深入解析MD5哈希算法:原理、应用与安全性

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 本文将深入探讨MD5哈希算法的工作原理、应用场景以及安全性问题。我们将了解MD5如何生成固定长度的哈希值&#xff0c;以及它在数…

Leo赠书活动-21期 《一篇讲明白 Hadoop 生态的三大部件》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

【OpenAI援引马斯克评价中国】小米汽车 SU7 顶配版或超 30 万/OpenAI 加持机器人亮相/荣耀已投入 100 亿研发 AI

雷军&#xff1a;共建一个更良性包容的汽车市场舆论环境 Figure 与 OpenAI 联手推出新机器人 亚马逊和 Google 悄悄降低对生成式 AI 的预期 小米生态链模式大改革&#xff0c;将进行分级管理 掌阅科技&#xff1a;致力打造国内首款真正 AI 阅读应用 荣耀称已投入 100 亿用于 AI…

Ipython与Jupyter之间的关系

IPython 和 Jupyter 之间的关系可以从它们的历史和目标中得到很好的解释。IPython&#xff08;Interactive Python&#xff09;最初是由 Fernando Prez 于 2001 年创建的&#xff0c;旨在提升 Python 的交互式计算体验。它提供了一个强大的交互式 Python shell 和一个面向高效计…

C语言例4-27:计算1+2+...+100之和(利用while语句实现)。

代码如下&#xff1a; //计算12...100之和&#xff08;利用while语句实现&#xff09;。 #include<stdio.h> int main(void) {int n1, sum0;while(n<100){ //复合语句作为当型循环结构的循环体sumsumn;n;}printf("sum %d\n",sum);retu…

Phoenix伪分布安装

引言 Phoenix是构建在HBase上的一个SQL层&#xff0c;能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表&#xff0c;插入数据和对HBase数据进行查询。Phoenix完全使用Java编写&#xff0c;作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫…

国赛大纲解读

1. 第一部分,是针对5G基础知识的掌握,第二部分是人工智能基本算法的掌握,就是人工智能的应用,用5G+人工智能(AI算法)进行网络优化的问题,要有网络优化的基础知识,比如说:某个区域的覆盖问题,覆盖特别差,但有数据,覆盖电频,srp值这些数据给你,根据数据来判断是…

Rabbitmq消息顺序的问题以及解决方案

1.1消息顺序的场景 场景1&#xff1a;一个queue&#xff0c;多个consumer 一个queue&#xff0c;有多个consumer去消费&#xff0c;这样就会造成顺序的错误&#xff0c;consumer从MQ里面读取数据是有序的&#xff0c;但是每个consumer的执行时间是不固定的&#xff0c;无法保…