【问题标题】:Is it possible to set multiple environment variables in one CMD line statement?是否可以在一个 CMD 行语句中设置多个环境变量?
【发布时间】:2013-08-01 11:15:01
【问题描述】:

我有一个 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"

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

有没有一种方法可以一次使用一行而不是 7 行设置多个变量?

【问题讨论】:

  • 您为什么要这样做?将它们各自放在自己的线上会更清楚。如果您真的想要一行,请将所有集合放在一个函数中。
  • 我同意它现在的情况会更清楚。但是,我想通过 MSBuild 中的 任务命令运行它们。并且每个 任务调用实际上创建了自己单独的 CMD 实例,导致 powershell 脚本看不到任何声明。但是,如果我能在一行中完成所有操作,那么这个问题就会得到解决。

标签: visual-studio-2010 powershell msbuild cmd post-build


【解决方案1】:

正如 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吗?
【解决方案2】:

是的,您可以将这些命令放在一起:

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

【讨论】:

  • 效果很好!这正是我所需要的。如果可以的话,我会 +1,该死的 +15 rep min...
  • 为此使用管道是错误的语义。管道是将一个命令的 STDOUT 连接到另一个命令的 STDIN 的运算符。 CMD 为菊花链命令提供 & 运算符。此外,您可能希望将双引号括在整个赋值中,否则它们将成为值的一部分。像这样:set "A=hi" & set "B=bye" & ....
  • 谢谢安斯加尔。我有一种感觉,管道不是解决问题的最佳方式,但它可以完成工作。
  • 嗯,我明白了...自从实现管道以来,命令现在在构建过程中无限期挂起。我将尝试使用 & 和双引号,看看这对我有什么帮助。也感谢您的意见。
  • @AndrewCheong 否。赋值表达式 ("VAR=value") 周围的双引号可防止包含尾随空格。您可以使用 echo _%A%_ 之类的内容进行验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 2015-08-21
相关资源
最近更新 更多