2010-01-13 82 views
7

這是一個簡單的例子,它修改了我想要做的變量名稱。也爲了簡單起見,我顯示的是命令行版本而不是bat文件版本。你如何在DOS下抑制環境變量擴展?

我正在做以下工作。

> echo %foo% 

%foo% 

但是,如果foo是一個有效的環境變量,我沒有得到期望的輸出(%FOO%)由於環境變量擴展。

> set foo=bar 
> echo %foo% 
> echo %%foo%% 

bar 
%bar% 

現在,我有一個黑客做(下面的例子),但我不知道是否有是要麼輸出一個「%」字符或壓制的環境變量擴展一個更清潔的方式。

> set foo=bar 
> set percent=% 
> echo %percent%foo%percent% 

%foo% 

此外,如果需要的解決方案在一個bat文件是不同的(如%%而非%或%1%而不是1%),請讓我知道。

我的實際使用案例是在帶有SETX的bat文件中設置全局環境變量,這些變量依賴於在其中擴展的另一個環境變量。

+0

你能解釋一下:「依靠另一個環境變量來擴展它們。」你想要一些嵌套的擴展,但不是在同一個可解析的字符串中的其他人? – cdkMoose 2010-01-13 18:04:53

+0

@cdkMoose:我想設置一個全局env。 var是類似'FOO_SDK_BIN =%FOO_SDK%/ BIN',但不能用SETX擴展'%FOO_SDK%'。然後,如果我使用SETX更改FOO_SDK變量路徑,那麼依賴它的所有變量也將被正確地重新設置。這只是爲了簡化一大堆開發機器的設置而使用的腳本,我們在這裏使用了第三方SDK,這些第三方SDK有許多像這樣的env變量,都可以植入單個env變量。 – Adisak 2010-01-13 18:10:41

+0

我不是家族的SETX,但它聽起來像是你在不希望它用SETX擴展「我想設置一個全局env。var爲類似FOO_SDK_BIN =%FOO_SDK%/ BIN但不能擴展用SETX%FOO_SDK%「。但是,稍後您希望在使用SETX更改變量後面的值後擴展它。在任何一項聲明中,它將會或不會擴大,但不會同時擴大。 – cdkMoose 2010-01-13 18:50:27

回答

6

在批處理文件中,echo %% foo %%將生成%foo%。

c:\01Temp>type foo.bat 
@echo %%foo%% 

c:\01Temp>foo 
%foo% 

c:\01Temp> 
+1

D'Oh!我被拋棄了,因爲如果foo被設置(%% foo %%在命令行上擴展到%bar%),它在命令行上不起作用。除了hack(set percent =%)之外,還有其他方法可以在命令行上執行嗎? – Adisak 2010-01-13 18:03:41

1

在批處理文件,使用兩個%% S,例如: -

set foo=1 
echo %%foo%% 

...回聲 「FOO%%」,而不是 「1」。我不知道在即時模式下禁用它的方法(例如,不在批處理文件中)。

+0

是的,我被拋棄了,因爲它無法按我想要的立即模式工作,無論我連續有多少%。 – Adisak 2010-01-13 18:54:19