| -1778- PowerShell ISE:その2 |
|
PowerShell でデバッガーが使えるようになったので、基本のスクリプトをブレークポイントを入れてトレースしてみた。 結果、今まで気づかなかったバグが見つかった。ファイルを扱うコマンドでファイル名に [ ](半角のカギカッコ)が入っている場合は正常にファイルが認識されていない。最初はまたシングルクォーテーションなどの引用符の問題かと思ったがどう入れ替えてみても改善しない。 ISEの上で Test-Path や Move-Item などのファイル操作コマンドを使っても同じようにファイル名が認識されていないようだ。 しかし今までは ISEのプロンプトにファイルパスを入力する場合、長いのでコピペしていたがアレコレ試すうちに、たまたま ファイル操作コマンドを打ち込んで、続けてファイルパスを途中まで入力していくとその先に存在するファイルパスの候補が表示される「入力補完機能」のような機能があることがわかった。インテリセンスと呼んでいるらしいが、このインテリセンスで問題のファイルパス候補を表示させてそこから選択して入力してから同じコマンドを実行すると何故か問題なく認識される事がわかった。 一見して同じように見える補完されたファイルパスとペーストしたファイルパスのどこが違うのか、目を皿のようにして長いファイルパスを見比べると、どうやら カギカッコの部分で補完されたファイルパスでは [ が `[ と ] が `] とエスケープされていることがわかった。どうやら Windows O/S上ではファイル名に使える 半角カギカッコ文字は制御文字として認識されてしまい、誤動作するらしい。 半角スペースも同じだが、半角スペースはファイルパス全体を引用符で囲むことで問題なくなるが、半角カギカッコは引用符で囲んでもダメなようだ。だからといっていちいちエスケープするのも面倒だと思って検索すると、コマンドに続けて -LiteralPath というスイッチを指定すればいいと分かった。 Test-Path -LiteralPath $fn のような感じで使う。「パラメーター全体がパスの文字列だ」と指定するようなスイッチらしい。 何とか動いたと思ったのに、まだまだ先が長そうだ。 今日の写真は初冬の薄い日に鮮やかさを増してきた黄色い小菊。 |
|
2016/11/19 |