對於一個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
asfindstr
可能會誤解某些序列,如 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%