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


186

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

Answers:


317

就像其他任何环境变量一样,使用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,并查看该站点上的其他参考- 函数也很有趣,语法也很棘手。

语法”页面应该使您入门。


3
如果将a添加setlocal到批处理文件,则该路径仅在文件中可见
jeb 2011年

您是否添加“ setlocal”?那可以代替“ SET”吗?
迈克尔,

@micheal:通过链接更新了我的答案。请阅读有关cmd脚本的一些文档/示例/教程- SET在执行任何脚本之前,您确实应该了解这些知识。
垫子

2
救生员。我需要在无法重新启动的服务器上添加一个EV,这使我无需执行重新启动即可执行所需的工作!
dav_i 2013年

8
即使没有SETLOCAL它,最多也只是用于单个命令提示符会话-如果您从多个批处理文件中执行此操作,并使用EXIT /B %N%,则SETLOCAL基本上只是在脚本退出时转储您的更改。:-/
BrainSlugs83 '04

21

有一个重要的细节:

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

不起作用,而

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

作品。不同之处在于报价!

UPD还可以看到venimus的评论


3
实际上,应该是SET "PATH=...%PATH%"路径中存在的其他空间会导致错误或行为异常。用这样的引号引起来的包装将不包括这些引号,但可以正确设置该变量。同样适用于任何其他env变量。
venimus

20

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

setx ENV_VAR_NAME "DESIRED_PATH" /m

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


也许/m需要之后setx
suzanshakya 2014年

对我来说,工作原理是相同的,但是此Win Batch Scripting对于MS来说是一笔未完成的工作。在我们公司拥有相同系统的所有笔记本电脑的公司中,没有用于PATH设置的通用脚本,我们维护着其中的2或3个,因此对您
有用的是

感谢更新。在Windows Server 2012中,当我放在/m末尾时,DESIRED_PATH仅在当前用户的末尾添加了/ m。
suzanshakya 2014年

11
请注意。在路径上使用setx尝试向路径中添加更多内容,并且该字符串的长度大于1024,我发现结果(我的环境PATH)被永久截断了。(我能做的一件好事是可以复制更改前回显的%PATH%,然后使用“环境变量窗口”工具将其放回原处。)
Andreas Jansson,2015年

注意!该命令直接覆盖系统环境变量!我已删除它们并尝试修复它们。对于任何犯过此错误的人:不要重新启动计算机。写入echo %path%,您将获得当前加载的路径。您需要将用户和系统环境变量彼此区分开。然后,您可以手动将它们应用到正确的位置。
Alper
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.