【问题标题】:How to insert a new path into system path variable if it is not already there如果新路径尚不存在,如何将新路径插入系统路径变量
【发布时间】:2013-06-09 19:01:37
【问题描述】:

我正在使用以下命令将路径附加到 Windows 系统 PATH 变量:

setx PATH "%PATH%;%ProgramFiles%\MySQL\MySQL Server 5.5\bin"

效果很好。

我的问题是:

如何将路径(在本例中为 %ProgramFiles%\MySQL\MySQL Server 5.5\bin)附加到系统 PATH 变量中,同时检查它是否已经存在,如果存在则不添加两次?

【问题讨论】:

    标签: windows batch-file setx


    【解决方案1】:
    @echo off
    setlocal EnableDelayedExpansion
    
    set "pathToInsert=%ProgramFiles%\MySQL\MySQL Server 5.5\bin"
    
    rem Check if pathToInsert is not already in system path
    if "!path:%pathToInsert%=!" equ "%path%" (
       setx PATH "%PATH%;%pathToInsert%"
    )
    

    【讨论】:

    • 在我看来,不建议使用本地 PATH 的值来更新系统 PATH。原因请参见我在Why are other folder paths also added to system PATH with SetX and not only the specified folder path? 上的回答
    • @TrevorHickey:尽管您必须编辑我的答案的原因是对的,但您应该意识到这个话题已有两年半的历史了,并且删除的部分确实无关紧要。我建议你把时间花在更有成效的任务上。
    • @Aacini 我花在编辑上的时间比你评论它的时间少。
    • @TrevorHickey:是的,这意味着您的编辑让您和我都分心,无法完成更有成效的任务……:/
    【解决方案2】:

    我认为最简单的方法是检查它是否存在,如果存在则附加到它,如果不存在则直接写入它。根据您的标签,我假设您正在尝试从批处理文件中执行此操作。 This page 似乎包含一个完全符合您需要的示例:

    IF "%PATH%" == "" GOTO NOPATH
    :YESPATH
    @ECHO The PATH environment variable was detected.
    PATH=C:\DOS;%PATH%
    GOTO END
    :NOPATH
    @ECHO The PATH environment variable was NOT detected.
    PATH=C:\DOS;
    GOTO END
    :END
    

    此批处理代码会将 C:\DOS 添加到路径中,只需将其替换为您想要使用的内容即可。当然,如果您不希望显示消息,您可能希望删除回显线或一起禁用回显。

    【讨论】:

    • %PATH% 有许多应用程序路径。当我尝试 echo %PATH% 时,它显示了许多路径。而C:\Program Files\MySQL\MySQL Server 5.5\bin 在 %PATH% 变量中。您的代码只是检查%PATH% 是否为空,然后附加C:\DOS。我需要检查%PATH% 中是否不存在'C:\DOS'。
    • @HamedKamrava 对不起,我误解了你的问题。嗯,这解释了很多,我已经想知道为什么有人想检查 %PATH% 是否存在,好像它通常不存在一样......
    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 2013-06-18
    • 2019-12-17
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多