对于一个CMD
会话,我可以轻松设置一条新路径:SET PATH=%PATH%;"insert custom path here"
在批处理文件中执行此操作不会考虑自定义路径是否已包含。如何避免重复(即检查它是否已包含在 PATH“字符串”中)。
评论:
- 有关的:如何将用户定义的环境变量附加到 Windows 7 中的系统变量 PATH?
- 有关的:如何通过命令行将条目永久地附加到系统的 PATH 变量中?
- 对于 UNIX 也有同样的问题:如果目录尚不存在,则将其添加到 $PATH
- 一些“CMD”字符串操作解释:http://ss64.com/nt/syntax-replace.html
答案1
与MaddHackers的答案类似,但更紧凑。
echo %path%|find /i "%np%">nul || set path=%path%;%np%
%np%
是您的新路径,当然您也可以使用文字代替。它的作用是:echo %path%|find /i "%np%">nul
搜索现有路径中的字符串,丢弃输出。||
表示失败时执行,因此它意味着:
搜索要添加的字符串的路径,如果未找到,则添加它。
编辑:一般来说,不需要引用路径,即使是包含空格的路径,但是如果你想引用他们,此版本将适用于双引号路径:
echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%
编辑:更改findstr /i /c:
为find /i
可能findstr
会误解一些序列,正如 KubaOber 在评论中指出的那样
答案2
我知道这很脏,但这应该可行:
SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')
其中%checkstr%
是在 PATH 中检查的字符串,%newpath%
是附加到当前 PATH 的新 PATH
希望这会有所帮助,我相信还有更简单的方法,但现在这应该可以解决问题。
编辑
因此,如果您不想将 UNIX 工具添加到 Windows,您可以尝试以下批处理语法:
echo %PATH% | find /C /I "<string to find>" > out.txt
set /p dne= < out.txt
if 0 EQU %dne% (set PATH=%PATH%;"<custom path>")
del out.txt
呃,没有任何漂亮之处,如果您可以让管道 find 命令作为 if 语句中的子命令工作,那么可以将其作为一行完成......
答案3
基于“wmz”的答案的脚本:
@ECHO off
ECHO java_home=%JAVA_HOME%
SET javapath=%JAVA_HOME%\bin
ECHO %path%|findstr /i /c:"%javapath:"=%">nul || set path=%path%;%javapath%
ECHO Path=%path%
PAUSE
答案4
2021 年更新答案:
set
不再起作用,我们需要使用setx
(略有不同的语法):
SET mypath=C:\dev\vendor\sass\1.32.4
ECHO %Path%|findstr /i /c:"%mypath:"=%">nul || setx Path "%Path%";%mypath%