2011-01-11 17 views
31

PowerShellスクリプトでは、名前にカッコが含まれている環境変数の値はどのように取得されますか?PowerShellでは、%ProgramFiles(x86)%のようなカッコで囲まれた環境変数名は、

いくつかの変数の名前にはカッコが含まれ、その他の変数には括弧のない類似の名前が含まれています。 (cmd.exeを使用)例:

C:\>set | find "ProgramFiles" 
CommonProgramFiles=C:\Program Files\Common Files 
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files 
ProgramFiles=C:\Program Files 
ProgramFiles(x86)=C:\Program Files (x86) 

我々は%ProgramFiles%%ProgramFiles(x86)%と同じではないことがわかります。

私のPowerShellコードは、括弧の後の環境変数名の部分を無視しているので、変な方法で失敗しています。これはという異なる名前のと一致しますが、既存の環境変数は失敗しません。間違った変数の正しい値を取得するだけです。

ここに私の問題を説明するためにPowerShellのスクリプト言語でのテスト関数です:

function Do-Test 
{ 
    $ok = "C:\Program Files (x86)"  # note space between 's' and '(' 
    $bad = "$Env:ProgramFiles" + "(x86)" # uses %ProgramFiles% 

    $d = "${ Env:ProgramFiles(x86) }" # fail (2), LINE 6 
# $d = "$Env:ProgramFiles(x86)"  # fail (1) 

    if ($d -eq $ok) { 
     Write-Output "Pass" 
    } elseif ($d -eq $bad) { 
     Write-Output "Fail: (1) %ProgramFiles% used instead of %ProgramFiles(x86)%" 
    } else { 
     Write-Output "Fail: (2) some other reason" 
    } 
} 

そして、ここでは出力です:

PS> Do-Test 
Fail: (2) some other reason 

は私がに上記の6行目に作ることができ、簡単な変更があります%ProgramFiles(x86)%の正しい値を取得しますか?

注:この記事のテキストでは、便利な省略形として環境変数にバッチファイルの構文を使用しています。たとえば、%SOME_VARIABLE%は、 "名前がSOME_VARIABLEである環境変数の値"を意味します。 PowerShellで適切にエスケープされた構文を知っていれば、私はこの質問をする必要はありません。

+0

おそらく便利です:http://geekswithblogs.net/Lance/archive/2009/12/29/program-files-environment-variable-in-powershell.aspx – Kiquenet

答えて

50

シンプルです。

()を含む変数を{}で囲むだけでよいのですが、行6を変更して角括弧内のスペースを削除してください。ブラケットの内側にはスペースを入れないでください。

+1

ありがとう@ravikanth!私は "$ {Env:ProgramFiles(x86)}"で失敗しましたが、それにはスペースが含まれていることに注意してください。私はこれが "$ {Env:ProgramFiles(x86)}"とは異なることに気付き、スペースを含んでいません。わかりやすくするために、あなたの答えにいくつかの追加テキストを追加しました。 – jwfearn

+0

私は自分の投稿と同じ余分な行を削除しました。あなたが気にしないことを願っています。 – jwfearn

+0

はい、ありがとうございます。 – ravikanth

関連する問題