Get-Contentで[]を含むファイル名が使えない


アニメ『BTOOOM!』(2012)

全然面白いのだけど、武器がずっと爆弾ばかりなので飽きてきます。そして何故だか無性にボンバーマンやりたくなってきます。面白いです。ボンバーマン。やっぱりゲームはシンプルなのが一番です。ボンバーマンの主人公は、ロードランナーの敵だったのですが、もうボンバーマンの方が有名ですね。
ロードランナーとボンバーマンの関係について、こんな記事を見つけました。
ボンバーマンがロードランナーになってたんですね。

今回は、前回に引き続き、PowerShellです。Get-Contentでも使ってみます。
今までまったく気づきませんでしたが、ファイル名に[]を含むファイル名の場合、Get-Contentが使えない場合があるようです。

前回作ったファイルで確認してみます。

C:\Users\takk\tmp>powershell "gci -r -n -include *.*"
14\06\78\26\71\file_4.c
14\55\90\38\9\file_[5].c
19\51\76\09\09\tmp.bin
20\65\59\82\30\tmp.bin
51\55\94\62\2\tmp.bin
61\41\04\04\8\file_[6].c

C:\Users\takk\tmp>

[]が含まれるファイル名のファイルは、 file_[5].cとfile_[6].cです。

Get-Content(cat)してみます。

C:\Users\takk\tmp>powershell "gci -r -n -include *.* | %{echo $_;cat $_ }"
14\06\78\26\71\file_4.c
1     1406782671
2     1406782671
3     1406782671
4     1406782671
14\55\90\38\9\file_[5].c
cat : 指定されたパス 14\55\90\38\9\file_[5].c にオブジェクトが存在しないか、-In
clude または -Exclude パラメーターによってフィルターされています。
発生場所 行:1 文字:36
+ gci -r -n -include *.* | %{echo $_;cat $_ }
+                                    ~~~~~~
    + CategoryInfo          : ObjectNotFound: (System.String[]:String[]) [Get-
   Content], Exception
    + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetCo
   ntentCommand

19\51\76\09\09\tmp.bin
1     1951760909
2     1951760909
3     1951760909
4     1951760909
20\65\59\82\30\tmp.bin
1     2065598230
2     2065598230
3     2065598230
4     2065598230
51\55\94\62\2\tmp.bin
1     515594622
2     515594622
3     515594622
4     515594622
61\41\04\04\8\file_[6].c
cat : 指定されたパス 61\41\04\04\8\file_[6].c にオブジェクトが存在しないか、-In
clude または -Exclude パラメーターによってフィルターされています。
発生場所 行:1 文字:36
+ gci -r -n -include *.* | %{echo $_;cat $_ }
+                                    ~~~~~~
    + CategoryInfo          : ObjectNotFound: (System.String[]:String[]) [Get-
   Content], Exception
    + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetCo
   ntentCommand


C:\Users\takk\tmp>

file_[5].cとfile_[6].cだけエラーとなりました。

回避するには、[]を`でエスケープするか、Get-Contentのオプション-LiteralPathを使えば良いです。

C:\Users\takk\tmp>powershell "gci -r -n -include *.* | %{echo $_;cat -literalpat
h $_ }"
14\06\78\26\71\file_4.c
1     1406782671
2     1406782671
3     1406782671
4     1406782671
14\55\90\38\9\file_[5].c
1     145590389
2     145590389
3     145590389
4     145590389
19\51\76\09\09\tmp.bin
1     1951760909
2     1951760909
3     1951760909
4     1951760909
20\65\59\82\30\tmp.bin
1     2065598230
2     2065598230
3     2065598230
4     2065598230
51\55\94\62\2\tmp.bin
1     515594622
2     515594622
3     515594622
4     515594622
61\41\04\04\8\file_[6].c
1     614104048
2     614104048
3     614104048
4     614104048

C:\Users\takk\tmp>

きれいに表示されました。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA