2013-07-31 73 views
1

我有一个PowerShell脚本设置为在MSBuild完成后执行。它使用在构建过程中的POSTBUILD部分设置环境变量(编译目录等。)目前,它看起来像这样:是否可以在一个CMD行语句中设置多个环境变量?

set MAGE="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe" 
    set APPFILE=$(TargetDir)$(TargetName).application 
    set MANIFEST=$(TargetPath).manifest 
    set CERT=$(ProjectDir)$(TargetName).pfx 
    set PROJECTNAME=$(TargetName) 
    set CONFIGURATION=$(ConfigurationName) 
    set TARGETDIR=$(TargetDir) 
    set TEAMBUILD=$False 
    Powershell -File "$(ProjectDir)POSTBUILD.ps1" 

每组单独的行上运行,但仍然是相同的CMD实例中。

有没有一种方法可以一次设置多个变量,只用一行代替7?

+1

你为什么要这么做?把它们放在一条线上更清楚。如果你真的想要一条线,把所有的集合放在一个函数中。 –

+1

我同意它现在更清楚。但是,我想通过MSBuild中的任务命令来运行它们。而每个任务调用实际上都会创建自己的独立CMD实例,导致powershell脚本不会看到任何声明。但是如果我能在一条线上做到这一点,那么问题就会解决。 –

回答

2

是的,你可以管的命令在一起:

set A="hi" | set B="bye" 
+0

非常棒!这正是我需要的。如果可以的话,我会+1,该死的+15代表分钟... –

+3

对此使用管道是不好的语义。管道是用于将一个命令的STDOUT连接到另一个命令的STDIN的操作员。 'CMD'为菊花链命令提供'&'运算符。此外,您可能希望在整个任务中加上双引号,否则他们将成为价值的一部分。像这样:'set“A = hi”&设置“B = bye”&...'。 –

+0

谢谢Ansgar。我有一种感觉,即管道不是最好的办法,但它可以完成工作。 –

2

由于安斯加尔指出,一个更好的解决办法是将菊花链的命令如下:

set A=foo & B=bar & C=baz

你可以甚至还内联脚本执行:

set A=foo & B=bar & C=baz & Powershell -File "$(ProjectDir)POSTBUILD.ps1"

相关问题