2024/08/27

番号リストを元にフォルダから写真をコピーする(AppleScript)

AppleScriptで、ファイルに書かれたファイル番号を元に、デスクトップにその番号のファイルをコピーするMac用スクリプトです。

スクリプトの概要

このスクリプトは、Finderで特定のファイル(ここでは 'list.txt')を検索し、その中のファイル名(番号)を読み取り、ユーザーが指定したフォルダからこれらのファイルをデスクトップ上の「抽出」フォルダにコピーします。ファイルが見つからない場合はエラーメッセージを表示します。

使い方

以下の手順に従って、スクリプトを使用することができます:

  1. スクリプトの準備: まず、上記のスクリプトを(スクリプトエディタ)AppleScriptエディタにコピー&ペーストします。
  2. ファイルの配置: 'list.txt' をFinderのアクティブなウィンドウに配置してください。このテキストファイルにはコピーしたい画像ファイルの名前がカンマで区切られて記載されている必要があります(例:001,002,003...※拡張子がない場合は.jpgが使われます)
  3. スクリプトの実行: スクリプトを実行すると、フォルダ選択ダイアログが表示されます。コピー元になるオリジナルファイルが入った参照元フォルダを選択してください。
  4. 結果の確認: ファイルが正常にコピーされた場合、デスクトップに新しい「抽出」フォルダが作成され、選択したファイルがその中に格納されます。何らかの理由でファイルが見つからなかった場合は、見つからなかったファイル名が表示されます。

property foldername : "抽出"


on run

activate

tell application "Finder"

set fileObject to (files of front window whose name is "list.txt") as alias

set fileObjectPOSIX to fileObject's POSIX path

end tell

set fileNumbers to readfileNumbers(fileObject)

copyFilesToDesktop(fileNumbers)

end run


-- ファイルの内容を読み込む関数

on readfileNumbers(fileObject)

set fileContent to read fileObject as «class utf8»

set AppleScript's text item delimiters to ","

set fileNumbers to text items of fileContent

return fileNumbers

end readfileNumbers


-- ファイルをデスクトップにコピーする関数

on copyFilesToDesktop(fileNumbers)

tell application "Finder"

set targetFolder to (choose folder with prompt "ファイルコピーの抽出元となるフォルダを指定してください") as text

set destinationFolder to (POSIX path of (path to desktop) & foldername) as text

end tell

do shell script "mkdir -p " & quoted form of destinationFolder

set errFiles to {}

repeat with fileNumber in fileNumbers

if length of fileNumber > 0 then

if not (fileNumber ends with ".jpg") then

set fileName to fileNumber & ".jpg"

else

set fileName to fileNumber

end if

set findCommand to "find " & quoted form of (POSIX path of targetFolder) & "*" & " -name " & quoted form of fileName

set foundFiles to paragraphs of (do shell script findCommand)

if (count of foundFiles) > 0 then

repeat with foundFile in foundFiles

set sourceFilePath to foundFile

set destinationFilePath to destinationFolder & "/" & fileName

do shell script "cp " & quoted form of sourceFilePath & " " & quoted form of destinationFilePath

end repeat

else

set end of errFiles to fileName

end if

end if

end repeat

if (count of errFiles) > 0 then

display dialog "次のファイルが見つかりませんでした: " & errFiles

else

if (count of fileNumbers) > 0 then

display dialog "該当番号をすべてデスクトップにコピーしました"

else

display dialog "検索対象の番号がありません"

end if

end if

end copyFilesToDesktop