這應該很簡單:我通常不希望我的 PATH 中包含 C:\MinGW\bin\gcc,但是當我這樣做時,我永遠不記得要添加什么,所以我想要一個簡單的批處理檔案,名為addGccToPath.bat. 對于初學者,我創建了這個簡單的批處理檔案:
@echo off
set PATH=C:\MinGW\bin;c:\MinGW\bin\gcc;%PATH%
這行得通,但如果我不小心多次呼叫它,我的 PATH 變數會變得不必要地變長。所以然后我想我會很聰明并使它有條件:
@echo off
if not defined PATH_BEFORE_ADDING_GCC (
set PATH_BEFORE_ADDING_GCC=%PATH%
set PATH=C:\MinGW\bin;c:\MinGW\bin\gcc;%PATH_BEFORE_ADDING_GCC%
echo Added GCC to your path.
) else (
echo GCC was already added to your path.
)
但是當我運行它時,我得到了這個:
C:\Users\minichm>addgcctopath
\Windows was unexpected at this time.
C:\Users\minichm>
我懷疑這是因為我的 PATH 變數包含文本“ C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\”,并且“x86”之后的結束括號終止了“if”子句,并且以下文本“\Windows Kits\8.1...”將其混淆,結果錯誤如圖。
如何有條件地將文本添加到已經包含括號的現有環境變數?
uj5u.com熱心網友回復:
永遠愛的延遲擴張陷阱
決議陳述句時沒有設定PATH_BEFORE_ADDING_GCC ,所以在第一條指令中if它會被什么都不替換。set path=
path然后將被替換為%PATH:~1,-1%
嘗試:
@echo off
if defined PATH_BEFORE_ADDING_GCC (
echo GCC was already added to your path.
goto alreadydone
)
set "PATH_BEFORE_ADDING_GCC=%PATH%"
set "PATH=C:\MinGW\bin;c:\MinGW\bin\gcc;%PATH%"
set "PATH=%PATH:~1,-1%"
echo Added GCC to your path.
:alreadydone
雖然我會質疑,set "PATH=%PATH:~1,-1%"因為它會洗掉 的c并c:...洗掉原始的最后一個字符path。
用于set "var=value"設定字串值 - 這可以避免尾隨空格引起的問題。不要分配終端\,空格或"- 從元素構建路徑名 - 違反直覺,這可能會使程序更容易。
uj5u.com熱心網友回復:
將值包裝起來,"以便特殊字符不會被視為特殊字符
set "PATH_BEFORE_ADDING_GCC=%PATH%"
set "PATH=C:\MinGW\bin;c:\MinGW\bin\gcc;%PATH_BEFORE_ADDING_GCC%"
實際上,您應該始終使用set "var=value"表格,因為它可以防止意外情況,即最后留下空格,最終會進入變數
uj5u.com熱心網友回復:
您的問題似乎是您添加的路徑中的空格。你可以用引號來解決這個問題,但是你必須從你的 PATH 中洗掉它們。告訴我這是否有效:
@echo off
if not defined PATH_BEFORE_ADDING_GCC (
set PATH_BEFORE_ADDING_GCC=%PATH%
set PATH="C:\MinGW\bin;c:\MinGW\bin\gcc;%PATH_BEFORE_ADDING_GCC%"
set PATH=%PATH:~1,-1%
echo Added GCC to your path.
) else (
echo GCC was already added to your path.
)
uj5u.com熱心網友回復:
以下是針對您的特定情況的其他幾條單行和 IMO 更簡單的替代方案:
使用If帶有變數擴展和替換的陳述句比較:
@If /I Not "%Path%" == "%Path:C:\\MinGW\\bin=%" Set "Path=%Path%C:\MinGW\bin;C:\MinGW\bin\gcc;"
%Path%使用該find.exe實用程式檢查內容:
@Path | %SystemRoot%\System32\find.exe /I "C:\MinGW\bin" 1>NUL || Set "Path=%Path%C:\MinGW\bin;C:\MinGW\bin\gcc;"
基本思想是驗證您的擴展內容是否Path已在其中某處包含字串C:\MinGW\bin,如果沒有,則將您的位置(都包含該字串)添加到其內容中。
只是關于后一種方法的腳注:
如果有可能沒有Path定義命名的變數,請不要使用此方法,因為結果Path會是Path=(null),而你的結果變數內容將是%Path%C:\MinGW\bin;C:\MinGW\bin\gcc;。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/497709.html
標籤:批处理文件
