Help us understand the problem. What is going on with this article?

PowerShellで安易にファイル操作を試みた結果

※個人的なメモです

確認事項
PowerShellでファイル操作困難な文字
 []
PowerShellでエスケープ必須の文字
 半角' 全角´
 半角& 全角&
 ※PowerShellは全角も特殊文字として扱う

コマンドプロンプトで特筆すべき禁止文字
 半角&

概要
PowerShellでフォルダ内の特定のファイルを探して子フォルダを作成して移動する簡単なスクリプトを書いた
ファイル名に[]が含まれているためフォルダ作成はできてもファイル移動が不可能
代替手段としてバッチに引数を渡して実行することにした
バッチに引数を渡すことはできたがバッチから戻り値( EXIT /B "文字列" )を得られなかった
PowerShellで与えた引数に全角&が含まれていると引数を""でエスケープしても
バッチ側でコマンドの区切りとして扱われて正常に動作しなかった
通常バッチは全角&を認識しないがPowerShellが引数を渡す時に半角&に変換するようだ

感想
PowerShell のコマンドレットだけではファイル操作は容易ではなかった
バッチだけで書いたほうが短いし簡単

追記
コメントでご指摘いただいた部分改修できました
-LiteralPath がタブ補完で出てこなかったので悩んでいました
バッチを通さないので上記の煩雑な引数の問題がすべて無くなしました
頭の整理のためコードを残しておきます

ファイルをフォルダに入れてアレするやつ.ps1(ver.7.0.2)
# ドラッグドロップでディレクトリのパスを取得(ショトカ起動)
Set-Location -Path $Args[0]
# ファイルだけ
$childlist = Get-ChildItem | ? { ! $_.PSIsContainer }
# フルパス
$fulllist = $childlist | Select-Object FullName | Format-Table -Wrap | Out-String -Stream
# 条件絞る
$matchlist = $fulllist -match 'sm[0-9]{8}.(flv|mp4)$'
# 再帰処理
foreach ($a in $matchlist) {
  [string]$b = Split-Path $a -LeafBase
  $c = $b.Substring($b.Length-10,10)

  mkdir $b
  Move-Item -LiteralPath $a -Destination $b
  Push-Location -LiteralPath $b
  get-Location | Out-String -Stream
  Start-Sleep -s 5
  "$cを使う処理"
  Pop-Location
  Start-Sleep -s 15
}
Read-Host "終了 Enter キーを押してください..."
Exit
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away