2010-01-13 81 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