【发布时间】:2011-10-13 12:48:57
【问题描述】:
基本上,我知道我可以通过控制面板修改路径变量。但是,我想知道是否有办法通过批处理编程包含一个临时路径?这样,它仅在该批处理文件执行期间使用。我不想让人们进入并修改他们的路径变量只是为了使用我的批处理文件。
【问题讨论】:
标签: path batch-file command command-prompt
基本上,我知道我可以通过控制面板修改路径变量。但是,我想知道是否有办法通过批处理编程包含一个临时路径?这样,它仅在该批处理文件执行期间使用。我不想让人们进入并修改他们的路径变量只是为了使用我的批处理文件。
【问题讨论】:
标签: path batch-file command command-prompt
就像任何其他环境变量一样,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,则路径仅在文件中可见
SET 确实是您在执行任何脚本之前应该了解和理解的内容。
SETLOCAL,它最多也只能用于那个单独的命令提示符会话——如果你从多个批处理文件中执行此操作,并使用EXIT /B %N%,那么SETLOCAL 基本上只是在脚本退出时转储您的更改。 :-/
没错,但它不会永久更改它,而只是针对当前命令提示符,如果您想永久更改它,则必须使用例如:
setx ENV_VAR_NAME "DESIRED_PATH" /m
这将永久更改它,是的,您可以用另一个批处理脚本覆盖它。
【讨论】:
/m 需要在setx 之后?
/m 放在末尾时,DESIRED_PATH 在末尾添加了 /m,仅供当前用户使用。
echo %path%,你会得到当前加载的路径。您需要区分用户和系统环境变量。然后您可以手动将它们应用到正确的位置。
有一个重要的细节:
set PATH="C:\linutils;C:\wingit\bin;%PATH%"
不工作,而
set PATH=C:\linutils;C:\wingit\bin;%PATH%
有效。区别在于引号!
UPD 还可以看到 venimus 的评论
【讨论】:
SET "PATH=...%PATH%" 否则路径中存在的空格会导致错误或行为不端。像这样用引号括起来不会包含它们,但会正确设置变量。同样适用于任何其他环境变量。
set PATH=%PATH%;C:\newpath; 和 set PATH="%PATH%;C:\newpath;" 都不起作用,但 set "PATH=%PATH%;C:\newpath;" 起作用了。