PowerShell の Select-Object では角括弧[]はワイルドカードとして扱われるため、
列名に角括弧[]を含む列をselectしたい場合は、以下のいずれかの方法を使います。
※以下では列名「打率[%]」を取り出す前提です。
- 開き角括弧[をバッククウォート2個でエスケープ
select 打率``[%]
- 列名をシングルクウォート’’で括り、開き角括弧[をバッククウォート1個でエスケープ
select '打率`[%]'
- 開き角括弧[をワイルドカード[]の対象に指定
select 打率[[]%]
検証環境
PS C:> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.19041.1645
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.1645
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
元のデータ
打率.csv
選手 | 打数 | 安打 | 打率[%] |
---|---|---|---|
aaa | 543 | 353 | 0.650 |
bbb | 654 | 311 | 0.476 |
ccc | 454 | 254 | 0.559 |
ddd | 586 | 423 | 0.722 |
PS C:> $data = Import-Csv .\打率.csv
PS C:\> $data
選手 打数 安打 打率[%]
---- ---- ---- -------
aaa 543 353 0.650
bbb 654 311 0.476
ccc 454 254 0.559
ddd 586 423 0.722
Selectで取り出す
- 列名をそのまま指定しても取り出せません。
PS C:> $data | select 打率[%]
打率[%]
-------
PS C:\> $data | select "打率[%]"
打率[%]
-------
- 開き角括弧[をバッククウォート2個でエスケープ
select 打率``[%]
ダブルクウォートで括っても同じ結果になりました。
select ”打率``[%]”
PS C:\> $data | select 打率``[%]
打率[%]
-------
0.650
0.476
0.559
0.722
PS C:\> $data | select "打率``[%]"
打率[%]
-------
0.650
0.476
0.559
0.722
- 列名をシングルクウォート’’で括り、開き角括弧[をバッククウォート1個でエスケープ
select '打率`[%]'
PS C:\> $data | select '打率`[%]'
打率[%]
-------
0.650
0.476
0.559
0.722
- 開き角括弧[をワイルドカード[]の対象に指定
select 打率[[]%]
ワイルドカード[xyz]は、「xyz」のいずれかの1文字にマッチします。
この対象に「[」を指定することで「[」自体がマッチします。
PS C:\> $data | select 打率[[]%]
打率[%]
-------
0.650
0.476
0.559
0.722
PS C:\> $data | select "打率[[]%]"
打率[%]
-------
0.650
0.476
0.559
0.722
プロパティとして列を取り出す場合
シングルクォートまたはダブルククォートで囲む必要があります。
PS C:\> $data.打率[%]
発生場所 行:1 文字:10
+ $data.打率[%]
+ ~
配列インデックス式が存在しないか、または無効です。
発生場所 行:1 文字:11
+ $data.打率[%]
+ ~
'%' 演算子に続けて値の式を指定する必要があります。
発生場所 行:1 文字:11
+ $data.打率[%]
+ ~
式またはステートメントのトークン ']' を使用できません。
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingArrayIndexExpression
PS C:\> $data.'打率[%]'
0.650
0.476
0.559
0.722
PS C:\> $data."打率[%]"
0.650
0.476
0.559
0.722