2016-12-01 93 views
0

在批處理文件中,我需要添加一些路徑到PATH env變量。由於它有更多的長路徑,我試圖將它們分散到多行上,並嘗試通過縮進行使盡可能清晰的蝙蝠文件。設置路線與多行

但似乎換行符開始處的空格(以及%PATH%)被解釋爲實際路徑的一部分。 所以

SET PATH=^ 
    \\somewhere\Tools\strawberryperl\perl\site\bin;^ 
    \\somewhere\Tools\strawberryperl\perl\bin;^ 
    \\somewhere\Tools\strawberryperl\c\bin;^ 
    \\somewhere\Tools\KDiff3;^ 
    %PATH% 

不起作用(程序未找到)。我可以使用一些技巧嗎? 因爲它是一箇中等複雜的批處理文件,所以一些縮進會很好。

+0

我認爲你必須把領先';'那裏Path變量通常對於沒有一個結束。你有沒有試過用'echo%PATH%'檢查變量的值? – geisterfurz007

+0

刪除縮進空格,它將工作... – aschipfl

回答

2

沒有辦法讓PATH忽略前導空格。我看到了兩個可能的選項,如果你想縮進的行:

選項1 - 使用未定義的變量來縮進,所以空間從來沒有在價值

@echo off 
SET PATH=^ 
% =%\\somewhere\Tools\strawberryperl\perl\site\bin;^ 
% =%\\somewhere\Tools\strawberryperl\perl\bin;^ 
% =%\\somewhere\Tools\strawberryperl\c\bin;^ 
% =%\\somewhere\Tools\KDiff3;^ 
% =%%PATH% 

選項2得到 - 刪除空格之後

@echo off 
SET PATH=^ 
    \\somewhere\Tools\strawberryperl\perl\site\bin;^ 
    \\somewhere\Tools\strawberryperl\perl\bin;^ 
    \\somewhere\Tools\strawberryperl\c\bin;^ 
    \\somewhere\Tools\KDiff3;^ 
    %PATH% 
set "PATH=%PATH:; =%" 
+0

對不起,%PATH%在複製和粘貼過程中丟失了 –

3
for %%x in (
    "\\somewhere\Tools\strawberryperl\perl\site\bin;" 
    "\\somewhere\Tools\strawberryperl\perl\bin;" 
    "\\somewhere\Tools\strawberryperl\c\bin;" 
    "\\somewhere\Tools\KDiff3;" 
) do call set "path=%%path%%%%~x" 

這將追加多餘的項目爲path。你需要初始化path沒有什麼首先如果你想要的是建立指定的目錄序列。

+0

我正在將這個選項添加到我的答案當你的答案彈出:-)所以我取消了我的編輯 – dbenham

+0

因爲我想添加在路徑的前面,這會顛倒新路徑的順序,因此必須以相反的順序直觀地指定它們。 –

1

首先,讓我開始通知您,以這種方式添加到PATH變量僅適用於正在運行的會話。一旦cmd會話關閉,該變量返回到其先前的值。

這裏有一個建議,一個追加每次添加一個:

SET "ToAdd=\\somewhere\Tools\strawberryperl\perl\site\bin;" 
SET "ToAdd=%ToAdd%;\\somewhere\Tools\strawberryperl\perl\bin;" 
SET "ToAdd=%ToAdd%;\\somewhere\Tools\strawberryperl\c\bin;" 
SET "ToAdd=%ToAdd%;\\somewhere\Tools\KDiff3" 
SET "PATH=%PATH%;%ToAdd%" 

順便說一句,如果你希望添加到超越正在運行的會話環境變量那麼你忽略的人建議你用的是很重要SETX而不是SET。 (該變量將被截斷爲1024字節,因此會對其進行破壞)。您的最佳解決方案將涉及編輯註冊表,並可能使用內置工具(如PowerShell)。

編輯

這顯示在我的評論中提到的方法,並使用相同的結構,脫線的回答是:

C:\ MYDIR \ Paths.txt

\\somewhere\Tools\strawberryperl\perl\site\bin 
\\somewhere\Tools\strawberryperl\perl\bin 
\\somewhere\Tools\strawberryperl\c\bin 
\\somewhere\Tools\KDiff3 

批處理文件

@Echo Off 
SetLocal EnableDelayedExpansion 
For /F "UseBackQDelims=" %%A In ("C:\MyDir\paths.txt") Do Set "Path=!Path!;%%~A" 
Echo(%Path% 
EndLocal 
Timeout -1 

這意味着你只需要每次都包含for循環而不是添加每個路徑。

+0

這個解決方案很笨拙。 Iam充分意識到,這次修改是不適用於本次會議的。由於iam也使用setlocal,所以它更受限於批處理腳本的運行時間。 –

+0

它不像其他解決方案那樣尷尬,這就是爲什麼每次打算使用這些工具時都必須創建它。在腳本編輯器中使用剪切和粘貼確實不會讓文件變得更尷尬。我建議你做的是創建一個文件,其中包含要添加到變量中的行,然後每次解析該文件而不是重新創建代碼,這將不那麼笨拙。 – Compo

0

甚至沒有遠程防彈,但馬古的回答提醒了我這一點。只是因爲有人在什麼地方,能找到這更好的用途構建

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    for /f "delims=" %%a in ('echo "%path:;=" "%" 

     "\\somewhere\Tools\strawberryperl\perl\site\bin" 
     "\\somewhere\Tools\strawberryperl\perl\bin" 
     "\\somewhere\Tools\strawberryperl\c\bin" 
     "\\somewhere\Tools\KDiff3" 

    ""') do (set "path=%%~a") & call set "path=%%path:" "=;%%" 

    path