命令提示符 - 如何仅为执行的批处理文件添加设置路径?

mic*_*ael 165 command path batch-file command-prompt

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

Mat*_*Mat 283

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

SET PATH=%PATH%;c:\whatever\else
Run Code Online (Sandbox Code Playgroud)

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

IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else
Run Code Online (Sandbox Code Playgroud)

如果您希望它是该批处理文件的本地文件,请使用setlocal:

setlocal
set PATH=...
set OTHERTHING=...

@REM Rest of your script
Run Code Online (Sandbox Code Playgroud)

仔细阅读文档setlocal/ endlocal,并查看该网站上的其他参考文献 - 函数也非常有趣,语法也很棘手.

语法页面应该让你开始的基本知识.

  • 即使没有`SETLOCAL`,它最多只会用于那个单独的命令提示会话 - 如果你是从多个批处理文件中执行此操作,并使用`EXIT/B%N%`,那么`SETLOCAL`基本上只是在脚本退出时转储您的更改.: - / (7认同)
  • 如果向批处理文件添加"setlocal",则该路径仅在文件中可见 (3认同)
  • 救生员。我需要在无法重新启动的服务器上添加一个EV,这使我无需执行重新启动即可执行所需的工作! (2认同)

小智 17

这是正确的,但它并没有永久改变它,但只是为了当前的命令提示符,如果你想永久地改变它,你必须使用例如:

setx ENV_VAR_NAME "DESIRED_PATH" /m
Run Code Online (Sandbox Code Playgroud)

这将永久地更改它,是的,您可以通过另一个批处理脚本覆盖它.

  • 提醒一句.在路径上使用setx,尝试向其添加更多内容,并且字符串长度> 1024,我发现结果(我的环境PATH)被永久截断.(我有一件好事可以复制我在更改之前已经过ECHOed的%PATH%,并使用环境变量窗口工具将其放回去.) (9认同)
  • 注意力!该命令直接覆盖系统环境变量!我已删除它们并尝试修复它们。对于犯过此错误的人来说:不要重新启动计算机。写入“echo %path%”,您将获得当前加载的路径。您需要区分用户和系统环境变量。然后您可以手动将它们应用到正确的位置。 (2认同)

184*_*615 17

有一个重要的细节:

set PATH="C:\linutils;C:\wingit\bin;%PATH%"
Run Code Online (Sandbox Code Playgroud)

不起作用,而

set PATH=C:\linutils;C:\wingit\bin;%PATH%
Run Code Online (Sandbox Code Playgroud)

作品.不同的是报价!

  • 事实上它应该是 `SET "PATH=...%PATH%"` 否则路径中存在的空格将导致错误或不当行为。像这样用引号括起来不会包含它们,但会正确设置变量。对于任何其他环境变量也同样适用。 (8认同)
  • 第一个版本适用于PowerShell (2认同)