亀の甲羅2

今日もまた朝とく起きて励まなん窓に明るきありあけの月

powerhell カギ括弧付きのファイルをファイル名変更(もしくは移動)

ファイル名に[] (カギ括弧)があると、Move-Itemがうまく動作しないことに気が付いた。

powershell ISEなどでオプションのサジェストには表示されないが「-LiteralPath」が使えるようだ。

PS > Move-Item -LiteralPath [aaa]aaa.txt ccc.txt

PS > ls
    ディレクトリ:
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/04/29     22:06             12 ccc.txt

検証

ファイルを作成

PS > echo "aho" > test.txt

PS > ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/04/29     22:06             12 test.txt

カギ括弧付きのファイル名に変更

Move-Itemはtoファイル名にカギ括弧はOKみたい。

PS > Move-Item .\test.txt [aaa]aaa.txt

PS > ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/04/29     22:06             12 [aaa]aaa.txt

カギ括弧つきファイル名を変更

空振りする。

PS > Move-Item [aaa]aaa.txt ccc.txt

PS > ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/04/29     22:06             12 [aaa]aaa.txt

ダブルクォーテーションで括ってみる。

PS > Move-Item "[aaa]aaa.txt" ccc.txt

PS > ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/04/29     22:06             12 [aaa]aaa.txt

シングルクォーテションで括ってみる。

PS > Move-Item '[aaa]aaa.txt' ccc.txt

PS > ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/04/29     22:06             12 [aaa]aaa.txt

エスケープ(\)してみる。

PS > Move-Item \[aaa\]aaa.txt ccc.txt
Move-Item : コマンドレットの動的パラメーターを取得できません。指定されたワイルドカード文字パターンは無効です: [aaa
発生場所 行:1 文字:1
+ Move-Item \[aaa\]aaa.txt ccc.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Move-Item]、ParameterBindingException
    + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.MoveItemCommand

エスケープ+ダブルクォーテーション。

PS > Move-Item "\[aaa\]aaa.txt" ccc.txt
Move-Item : コマンドレットの動的パラメーターを取得できません。指定されたワイルドカード文字パターンは無効です: [aaa
発生場所 行:1 文字:1
+ Move-Item "\[aaa\]aaa.txt" ccc.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Move-Item]、ParameterBindingException
    + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.MoveItemCommand

エスケープ+シングルクォーテーション。

PS > Move-Item '\[aaa\]aaa.txt' ccc.txt
Move-Item : コマンドレットの動的パラメーターを取得できません。指定されたワイルドカード文字パターンは無効です: [aaa
発生場所 行:1 文字:1
+ Move-Item '\[aaa\]aaa.txt' ccc.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Move-Item]、ParameterBindingException
    + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.MoveItemCommand

エスケープ文字がバックスラッシュかな?と思って試す。

PS > Move-Item `[aaa`]aaa.txt ccc.txt

PS > ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/04/29     22:06             12 [aaa]aaa.txt

いずれもダメでした。