CMD:附加到路径而不复制它?

Hor*_*ter 15 windows path command-line

对于一个CMD会话,我可以轻松设置一条新路径:SET PATH=%PATH%;"insert custom path here"

在批处理文件中这样做不会考虑是否已包含自定义路径。我如何避免重复它(即检查它是否已包含在 PATH“字符串”中)。

评论:

  1. 相关:如何将用户定义的环境变量附加到 Windows 7 中的系统变量 PATH?
  2. 相关:如何通过命令行将条目永久附加到系统的 PATH 变量中?
  3. UNIX 的相同问题:如果 $PATH 尚不存在,则将目录添加到 $PATH
  4. 一些“CMD”字符串操作解释:http : //ss64.com/nt/syntax-replace.html

wmz*_*wmz 18

类似于 MadHackers 的答案,只是更紧凑。
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 /ifindstr可能误解了一些序列由KubaOber在评论中所指出

  • @HorstWalter 查看我的编辑。如果您使用变量,这只是一个问题,使用文字(如`echo %path%|findstr /i /c:"my path">nul || set path=%path%;"my path"`)应该可以工作美好的。 (2认同)

Mad*_*ker 5

我知道它很脏,但这应该有用:

 SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')
Run Code Online (Sandbox Code Playgroud)

其中%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
Run Code Online (Sandbox Code Playgroud)

呃,没有任何漂亮的,如果你能让管道化的 find 命令作为 if 语句中的子命令工作,那么可以作为一行完成......


归档时间:

查看次数:

16174 次

最近记录:

5 年 前