【问题标题】:How to add a set path only for that batch file executing?如何仅为该批处理文件执行添加设置路径?
【发布时间】:2011-10-13 12:48:57
【问题描述】:

基本上,我知道我可以通过控制面板修改路径变量。但是,我想知道是否有办法通过批处理编程包含一个临时路径?这样,它仅在该批处理文件执行期间使用。我不想让人们进入并修改他们的路径变量只是为了使用我的批处理文件。

【问题讨论】:

    标签: path batch-file command command-prompt


    【解决方案1】:

    就像任何其他环境变量一样,SET:

    SET PATH=%PATH%;c:\whatever\else
    

    如果您想先内置一点安全检查,请先检查新路径是否存在:

    IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else
    

    如果您希望该批处理文件在本地,请使用setlocal

    setlocal
    set PATH=...
    set OTHERTHING=...
    
    @REM Rest of your script
    

    仔细阅读 setlocal/endlocal 的文档,并查看该站点上的其他参考资料 - Functions 也很有趣,而且语法很复杂。

    Syntax 页面应该让您开始了解基础知识。

    【讨论】:

    • 如果在批处理文件中添加setlocal,则路径仅在文件中可见
    • 你如何添加“setlocal”?那是代替“SET”吗?
    • @micheal:用链接更新了我的答案。请阅读一些关于 cmd 脚本的文档/示例/教程 - SET 确实是您在执行任何脚本之前应该了解和理解的内容。
    • 救命稻草。我需要在无法重新启动的服务器上添加一个 EV,这样我就可以做我需要的事情,而无需安排重新启动!
    • 即使没有SETLOCAL,它最多也只能用于那个单独的命令提示符会话——如果你从多个批处理文件中执行此操作,并使用EXIT /B %N%,那么SETLOCAL 基本上只是在脚本退出时转储您的更改。 :-/
    【解决方案2】:

    没错,但它不会永久更改它,而只是针对当前命令提示符,如果您想永久更改它,则必须使用例如:

    setx ENV_VAR_NAME "DESIRED_PATH" /m
    

    这将永久更改它,是的,您可以用另一个批处理脚本覆盖它。

    【讨论】:

    • 也许/m 需要在setx 之后?
    • 对我来说同样有效,但这个 Win Batch Scripting 是 MS 未完成的工作。在我的公司里,我们有相同系统的所有相同笔记本电脑,没有用于 PATH 设置的通用脚本,我们正在维护其中的 2 或 3 个,所以不管对你有用:)
    • 感谢您的更新。在 Windows Server 2012 中,当我将 /m 放在末尾时,DESIRED_PATH 在末尾添加了 /m,仅供当前用户使用。
    • 请注意。在路径上使用 setx ,尝试向其添加更多内容,并且字符串 > 1024 长,我发现结果(我的环境 PATH)被永久截断。 (一件好事,我可以复制我在更改之前 ECHO 输出的 %PATH%,然后使用环境变量窗口工具将其放回原处。)
    • 注意!该命令直接覆盖系统环境变量!我已删除它们并尝试修复它们。也适用于犯此错误的任何人:不要重新启动计算机。写echo %path%,你会得到当前加载的路径。您需要区分用户和系统环境变量。然后您可以手动将它们应用到正确的位置。
    【解决方案3】:

    有一个重要的细节:

    set PATH="C:\linutils;C:\wingit\bin;%PATH%"
    

    不工作,而

    set PATH=C:\linutils;C:\wingit\bin;%PATH%
    

    有效。区别在于引号!

    UPD 还可以看到 venimus 的评论

    【讨论】:

    • 实际上应该是SET "PATH=...%PATH%" 否则路径中存在的空格会导致错误或行为不端。像这样用引号括起来不会包含它们,但会正确设置变量。同样适用于任何其他环境变量。
    • 感谢@venimus 的评论。 set PATH=%PATH%;C:\newpath;set PATH="%PATH%;C:\newpath;" 都不起作用,但 set "PATH=%PATH%;C:\newpath;" 起作用了。
    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多