1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PowerShellでワイルドカードパターンを含む文字列をエスケープ処理する

Last updated at Posted at 2021-12-29

本記事ではPowerShellでワイルドカードパターンを含む文字列をエスケープする処理方法について説明します。

前半部分はどのような問題があるかを説明しているため、文字列をエスケープ処理方法としては、WildcardPatternクラスのEscapeメソッドを利用してエスケープするの項からが本題となります。

そもそもワイルドカードパターンを含む文字列でエスケープ処理が必要な場合

PowerShellでスクリプトを書いているたとたまにファイル名にワイルドカードパターンを含んでいてファイルを処理しようとして想定しない処理となってしまう事があります。

ありがちなのは[]を含むファイル名を操作しようとする場合があります。

例としては、[foobar]helloworld.txtというファイルが存在したとして、このファイルを操作しようとして。

Get-Item [foobar]helloworld.txt と実行しても何も取得できません。

image.png

これはファイル名に[]がつかわれておりワイルドカードパターンを含む文字列となってしまっているためです。

このためファイル操作しようとしていますが、ワイルドカードで解釈されて想定通り動作しません。

対応としては[]をエスケープ処理してあげる必要があります。

下記はバッククオートでエスケープした場合の画像。

image.png

上記の例では、Get-Itemでしたが、Copy-ItemだったりRemove-Itemでも同様です。

上記コマンドレットはオプション指定をされていない場合は、Pathオプションに引き渡されますが、このPathがワイルドカードパターンが含まれていた場合、このような動作になってしまっています。

LiteralPathオプションを利用して回避することもできる

このような場合どうするかといえば、文字列をエスケープ処理してあげる以外にも、標準のコマンドレットではLiteralPathというオプションがだいたい用意されているのでこちらを使えば問題はありません。

LiteralPathオプションを使う
Get-Item -LiteralPath [foobar]helloworld.txt

image.png

ワイルドカードが含まれてい、それを考慮できておらず失敗するケースはPowerShellあるあるかと思います。

WildcardPatternクラスのEscapeメソッドを利用してエスケープする

標準以外のコマンドレットだったり、自作のコマンドレットでLiteralPathがなくて困る場合はあるので、PowerShellでワイルドカードパターンが含まれている文字列のエスケープ方法について。

WildcardPattern Class

上記WildcardPatternクラスのEscapeメソッドを利用すると、特殊な文字をエスケープした文字に変換してくれます。

WildcardPatternクラスのEscapeメソッドでエスケープ
[System.Management.Automation.WildcardPattern]::Escape(".\[foobar]helloworld.txt")

image.png

画像の用に、バッククオートで特殊文字をエスケープしてくれます。これを利用することによって特殊文字を含んでいてもPathオプションで処理できるようになります。

下記はエスケープしない文字列とエスケープした文字列をパイプでGet-Itemコマンドレットに渡したパターン。

image.png

総評

ファイルコピーしたり、ログ削除したりといった処理を書いているときに、このような処理を知らないと想定外の動作をしてしまう場合があります。

これはPowerShellあるあるな気がしますが、LiteralPathだったりエスケープ方法を理解しておくことで問題ないスクリプトを作成しましょう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?