とにかくパワーシェルでファイルのリネームがしたかった
今回は置換コマンドを利用したものとなっています
##概要と説明
特定のファイル名を文字数の異なるファイル名にするために、ファイル名を置換する用のps1ファイルを作る
Windows PowerShellを使って複雑なパターンのファイル名変更を行う
上記のサイトでご紹介の
Get-ChildItem <対象ファイル> | Rename-Item -NewName { $_.Name -replace '旧文字列','新文字列' }
を参考にして、筆者にとって使いやすいようにしたもの
例えば以下のようなファイル構成とするとき
PS C:\user\xyz>Get-ChildItem -Name
12332.xyz
1233454.xyz
12335.xyz
123456.xyz
1236516.xyz
123log.log
example.sys
Rename.ps1
上記xyzフォルダ内の*.xyzファイルのみ名前を文字数の異なるファイル名に変えたい
※Move-Itemというコマンドレットもありますが、今回はreplaceを使っております
##PowerShellコード
応用すれば容易にファイル名を規則的に変換できると思います
$extension="xyz"
#xyzファイル一覧のホスト出力
Write-Host $extension"ファイル一覧"
Get-ChildItem -Name *$extension
#before replacementを略してBr
$Br=Read-Host "変換前ファイル名を入力:"
#After replacementを略してAr
$Ar=Read-Host "変換後ファイル名を入力:"
#拡張子がxyzのファイルに対してファイル名を変換(正確には置換)
Get-ChildItem *$extension | rename-item -NewName { $_.name -replace $Br,$Ar }
#PowerShell ISEで実行したときの確認用のホスト出力
Write-Host "ファイル一覧(変換後)"
Get-ChildItem -Name
実行例:Rename.ps1をPowerShellで実行
xyzファイルと同じフォルダで実行
xyzファイル一覧
12332.xyz
1233454.xyz
12335.xyz
123456.xyz
1236516.xyz
変換前文字列を入力:: 123
変換後文字列を入力:: A
ファイル一覧(変換後)
123log.log
A32.xyz
A3454.xyz
A35.xyz
A456.xyz
A6516.xyz
example.sys
Rename.ps1
123*.xyzがA*.xyzに変換された
...正確には置換ですが
##参考
初心者には助かります
文字列の入力を受け取る (PowerShell プログラミング)
再掲:Windows PowerShellを使って複雑なパターンのファイル名変更を行う
##最後に
ホスト出力でも結果を確認したいので、コマンドプロンプトでいうpauseみたいなのはないのかね
ISEの通称はイスじゃなくてアイスなのね、イスでよくない?
というか今回はMove-Item使えばよかったのかも