是否可以在一个CMD行语句中设置多个环境变量?

Mas*_*dow 2 msbuild powershell cmd visual-studio-2010 post-build

我将PowerShell脚本设置为在MSBuild完成后执行。它使用在构建过程的POSTBUILD部分(构建目录等)中设置的环境变量。当前看起来像这样:

  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"
Run Code Online (Sandbox Code Playgroud)

每个集合都在单独的线上运行,但仍在同一CMD实例中。

有没有办法我可以只用一行而不是7来一次设置多个变量?

Dan*_*nau 5

是的,您可以将命令通过管道传递到一起:

set A="hi" | set B="bye"
Run Code Online (Sandbox Code Playgroud)

  • 为此使用管道是不好的语义。管道是用于将一个命令的STDOUT连接到另一命令的STDIN的运算符。CMD为菊花链命令提供`&`运算符。另外,您可能希望将双引号放在整个作业中,否则它们将成为值的一部分。像这样:`set“ A = hi”&set“ B = bye”&...`。 (4认同)
  • @AndrewCheong 不。赋值表达式周围的双引号(`“VAR = value”`)防止包含尾随空格。您可以使用“echo _%A%_”之类的内容来验证这一点。 (3认同)
  • 效果很好!这正是我所需要的。如果可以的话,我会 +1,该死的 +15 代表分钟... (2认同)

Mat*_*ows 5

正如Ansgar所指出的那样,更好的解决方案是将命令菊花链化,如下所示:

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

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

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

  • 不应该是`set A=foo & set B=bar & set C=baz` 而不是`set A=foo & B=bar & C=baz` 吗? (4认同)