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
いずれもダメでした。