PowerShellのスクリプト(拡張子.ps1)を使って、フォルダー内の画像ファイルに連番を追加する方法を備忘録的に投稿します。
フォルダー内のファイルをリネーム
実際に実行するスクリプトは次のようになります。
Param($Arg1)
Set-Location -Path $Arg1
$files = Get-Item *.jpg
$number = 1
foreach($f in $files) {
$str = $f.name
$n = $str.Length - 4
$label = "0" + $number
$label = $label.Substring($label.Length - 2, 2)
$rename = $str.Substring(0, $n) + "-" + $label + ".jpg"
Rename-Item $f.name -NewName $rename
Write-Host($rename)
$number++
}
拡張子 .jpg を対象にしていますが、他の画像形式にする場合は任意で書き換えてください。.txt や .log など画像ファイル以外でも可能です。
特にコメントは居れていませんが、引数で指定されたフォルダー内のファイル一覧を取得して、ループ内でファイル名を作成してリネームをしています。
スクリプトの実行
Windowsで導入されたセキュリティで、既定値(インストール直後)の状態では、PowerShellでのスクリプトファイル実行は許可されていないので、セキュリティを一時的に解除してから実行を行います。
恒久的にスクリプトの実行を解除しても良いですが、セキュリティのリスクが高くなるので、あまりオススメはしません。実行時に1回手間になりますが普段からスクリプトの実行をするような方は、そんなに負担ではないはずです。
1. PowerShell(またはWindows Terminal)を開きます。
2. 現在のセキュリティ設定を確認するために、次のコマンドを実行します。
3. 次のコマンドを入力します。
Set-ExecutionPolicy RemoteSigned -Scope Process
4. 対象のフォルダー名を引数に指定して、スクリプトを実行します。
rename-files-in-folder.ps1 <対象のフォルダー名>
5. フォルダー内のJPEGファイルに連番が追加されます。
スコープ設定は重要
スクリプトの実行セキュリティを変更するのは、ウィルスなどのリスクがあります。先ほどの手順でも[Set-ExecutionPolicy]を、Scopeオプションを追加して設定を行いました。
-Scope Process
を追加して実行した場合、セキュリティ設定の変更範囲が、現在のプロセスに限定されます。このオプションを使うことで、スクリプトを実行したい時(PowerShellやWindows Terminalを開いている間)のみ変更することができるので、利用しない場合のセキュリティを保つことができるようになります。
まとめ
PowerShellのスクリプトファイル(拡張子 .ps1)を利用してフォルダー内のファイルに連番を追加する手順を紹介しました。
昔ながらのバッチファイルでも同様のことができますが、PowerShellのスクリプトファイルの方が、拡張性が高く、コマンドプロンプトを使った機能より、将来的に様々な用途で利用できる可能性があります。
フォルダー内のファイル名の変更作業は、手作業で行うと案外面倒な作業になるので自動化することで、ストレスや時間短縮につながるのでオススメな自動化です。
フォルダー内のファイルを一気に名前変更したい方の参考になれば幸いです。
最後までご覧いただき、ありがとうございます。