CMD:附加到路徑而不重複它?

CMD:附加到路徑而不重複它?

對於一個CMD會話,我可以輕鬆設定一條新路徑:SET PATH=%PATH%;"insert custom path here"

在批次檔中執行此操作不會考慮自訂路徑是否已包含。如何避免重複它(即檢查它是否已包含在 PATH“字串”中)。

評論:

  1. 有關的:如何在 Windows 7 中將使用者定義的環境變數附加到系統變數 PATH?
  2. 有關的:如何透過命令列將條目永久附加到系統的 PATH 變數中?
  3. 對於 UNIX 來說同樣的問題:將目錄新增至 $PATH(如果尚不存在)
  4. 一些“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 /iasfindstr可能會誤解某些序列,如 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%

相關內容