2024/09/25

AppleScriptでファイル・フォルダを簡易的にリネーム(置換)する

わずか4フォルダほどリネームしたいフォルダがあったので、ChatGPTさんに作って貰いました。

ファイルやフォルダに含まれる文字列を他の文字列に置換するだけのスクリプトです。

自分はスクリプトメニューに登録して使う予定ですが、Automatorから作れば右クリックの「サービス」から使用することもできるかと思います。

もっと大量にリネームするファイルがある場合や、複雑なリネームの場合には、有料ですが ちゃちゃっとリネーマー がオススメです!

Windowsでは定番で無料の Flexible Renamer を使用していましたが、Windowsの方にはこちらもオススメです。


記事内容もChatGPTさん作成↓


今回は、AppleScriptを使ってFinderで選択したファイルやフォルダの名前をリネームする方法をご紹介します。特定の文字列を置換し、同名ファイルが存在した場合には印を付ける処理を行います。

スクリプトの概要

このスクリプトでは、以下の処理を行います:

  • Finderで選択したファイルやフォルダの名前を取得。
  • 置換対象の文字列と置換後の文字列をダイアログから入力。
  • 置換後、同名ファイル・フォルダがあった場合に、名前の末尾に印をつける。

同名ファイル・フォルダが存在する場合は、"_renamed" という印を名前に付与します。これにより、内容が異なることを示唆できます。

AppleScriptのコード

property previousSearchString : ""

property previousReplaceString : ""


-- Finderで選択したファイルやフォルダの名前を取得

tell application "Finder"

set selectedItems to selection

if length of selectedItems is 0 then

display dialog "ファイルやフォルダが選択されていません。" buttons {"OK"} default button "OK"

return

end if

end tell


-- 使用できない文字を確認する関数

on hasInvalidCharacters(inputString)

set invalidCharacters to {":", "/", "?", "<", ">", "\\", "*", "|", "\""} -- macOSで使用できない文字

repeat with i from 1 to length of invalidCharacters

if inputString contains item i of invalidCharacters then return true

end repeat

return false

end hasInvalidCharacters


-- 前回の置換パターンを確認し、置換対象の文字列を取得

set searchString to previousSearchString

repeat

set searchString to text returned of (display dialog "置換したい文字列を入力してください。" default answer previousSearchString)

if searchString is "" then

display dialog "文字列が入力されていません。" buttons {"OK"} default button "OK"

else if hasInvalidCharacters(searchString) then

display dialog "使用できない文字列が含まれています。" buttons {"OK"} default button "OK"

else

set previousSearchString to searchString

exit repeat

end if

end repeat


-- 置換後の文字列を取得

set replaceString to previousReplaceString

repeat

set replaceString to text returned of (display dialog "置換後の文字列を入力してください。" default answer previousReplaceString)

if hasInvalidCharacters(replaceString) then

display dialog "置換後の文字列に使用できない文字が含まれています。" buttons {"OK"} default button "OK"

else

set previousReplaceString to replaceString

exit repeat

end if

end repeat


-- 置換処理フラグ

set replacementMade to false


-- ファイル・フォルダ名の置換処理

tell application "Finder"

repeat with selectedItem in selectedItems

set itemName to name of selectedItem

if itemName contains searchString then

set newName to my replaceText(searchString, replaceString, itemName)

-- 同名のファイルやフォルダが存在するか確認

try

set name of selectedItem to newName

on error

-- 同名ファイル・フォルダがある場合

display dialog "同名のファイルまたはフォルダが存在します: " & newName

set newName to newName & "_renamed" -- 名前に _renamed を付与

set name of selectedItem to newName

end try

set replacementMade to true

end if

end repeat

end tell




-- 処理終了のダイアログ

display dialog "リネームが終わりました"


-- 置換対象がなかった場合の処理

if not replacementMade then

display dialog "置換対象の文字列が選択されたファイルやフォルダに見つかりませんでした。" buttons {"OK"} default button "OK"

return

end if


-- 文字列置換の関数

on replaceText(searchString, replaceString, inputString)

set AppleScript's text item delimiters to searchString

set textItems to text items of inputString

set AppleScript's text item delimiters to replaceString

set replacedString to textItems as text

set AppleScript's text item delimiters to ""

return replacedString

end replaceText


ヒント: AppleScriptを使用することで、Finderの操作を自動化し、簡単にリネーム処理を行うことができます。同名ファイルに対する対応をきちんと考えることが、効率的なファイル管理につながります。