PowerShell内でVisual Studioの環境変数を設定するためにいくつかの関数を使用していて、vcvarsXXX.batバッチファイルを実行して、 setの出力とname = valueを探し、Set-Itemを使ってPS側の環境変数を設定します。
のようにこれが見えない機能:私が呼び出す場合、私は気づいた問題があることは、正規表現マッチの後で
# from Bruce Payette's book to set the environment variables, slightly modified
function Get-Batchfile ($file) {
$cmd = "`"$file`" & set"
cmd /c $cmd | Foreach-Object {
# variation from Payette's book, use a regex in case the batch file writes some output, only take name=value
if ($_ -match "^(.*?)=(.*)$") {
# make sure they look good
write-host $matches[1] "=" $matches[2]
$name=$matches[1]
$value=$matches[2]
write-host ">>> $name = $value"
Set-Item -path env:$name -value $value
# for some reason the set item below does not seem to work even though the values of $matches look good
#Set-Item -path env:$matches[1] -value $matches[2]
}
}
}
:
セットアイテムのENV -path:$マッチ[1] $マッチ[2]
- 値が、私は$の名前と$値に$試合を割り当て、呼び出す場合:
セットアイテムのENV -path:$名前 - 値の$値
期待どおりに動作します。
私はこれを回避しましたが、最初のものがなぜ機能していないのか理解したいと思います。むしろコードをよりコンパクトに保ち、2つの一時変数を作成する必要はありません。
少なくとも通常の括弧は十分です値のために:これは良く機能しない場合
を参照してください。 – Joey
追加評価なしで値は機能します。変数はそうではありません。 – mjolinor
だから私は "可変"ではなく "価値"と言ったのです。 – Joey