投稿日:2022年12月4日

前回のブログ ではn個おきのファイルを開き、Photoshopで処理しました。

Photoshopで開く前に、処理するファイルとして、Finderでタグに色をつけていました。

※Macのタグについてはこちらをご参照ください。

やはり処理する枚数が増えてくると、数え違いが起きたり、大変な労力と時間が費やされます
これをAppleScriptで自動化できないものかと検証してみました。
AppleScriptを扱うのは、およそ14年ぶりになります。

ソースコードです。

▲コメントを記載してますが、以下、項目ごとに説明していきます。

set chooseFolder to choose folder with prompt "処理対象のフォルダを選択してください。" --処理対象のフォルダを選択
set everyFiles to every file of chooseFolder --フォルダから全てのファイルを取得

▲フォルダ選択を促すダイアログを表示させ、 everyFiles という変数にフォルダ内のファイル全てを格納してます。

-- ▼▼▼ 数値入力ダイアログ	
	repeat
		try
			set inputNum to text returned of (display dialog "いくつおきに処理しますか?" with icon note default answer "0") as number
			exit repeat
		on error
			display dialog "数字を入力してください。" --エラー処理
		end try
	end repeat
	------------------

▲いくつおきに処理をするのか入力ダイアログを表示させます。
数字以外入力した場合、エラーをループ表示させます。
数字を入力したときに上記5行目の exit でループを抜けます。

-- ▼▼▼ タグの色を選択
	set chooseColors to choose from list {"なし", "レッド", "オレンジ", "イエロー", "グリーン", "ブルー", "パープル", "グレイ"} with prompt "タグの色を選択してください。" with multiple selections allowed --複数選択可

choose from list のリスト(配列)表示から選択するようにします。
項目は「なし」を含めて8種類。
with multiple selections allowed で複数選択ができるようにしています。

set chooseColorsArray to {} --空のリストを準備

▲空のリストを作成。

	if chooseColors contains "なし" then
		set end of chooseColorsArray to "\"なし\""
	end if
	if chooseColors contains "レッド" then
		set end of chooseColorsArray to "\"レッド\\n6\","
	end if
〜〜〜 以下、省略 〜〜〜

▲選択した項目に対して \"なし\" や、\"レッド\\n6\", を文字列としてリストに追加していきます。
\"レッド\\n6\", の最後のカンマは、59行目の変数 chooseColorsArray で色を渡す際、複数だとCSVで渡す必要があります。文字結合でカンマを入れてもいいのですが面倒なのでここで入れておきます。
色名とその色の数値は以下です。(参照元は忘れてしまいました。)
\"なし\n0\"
\"レッド\n6\"
\"オレンジ\n7\"
\"イエロー\n5\"
\"グリーン\n2\"
\"ブルー\n4\"
\"パープル\n3\"
\"グレイ\n1\"
▲「”」は「\」でエスケープしています。

set chooseColorsArray to chooseColorsArray as Unicode text

▲文字列に型変換してます。

-- ▼元から設定されているタグを削除。ディレクトリのファイルの数だけ繰り返す
	repeat with targetFiles in everyFiles
		set targetFilesTxt to targetFiles as Unicode text
		set processedFiles to POSIX path of targetFilesTxt
		-- ▼Finderで設定したタグを削除
		do shell script "xattr -wx com.apple.FinderInfo '00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00' " & processedFiles
		-- ▼改めて全てのタグを「なし(削除)」に設定
		do shell script "xattr -w com.apple.metadata:_kMDItemUserTags '(\"なし\\n0\")' " & processedFiles
	end repeat

▲4行目の POSIX path of〜 でパスを取得しています。
6行目でFinderで手動で設定した全てのタグを削除し、8行目で改めてタグを「なし」に設定しています。
こういう書き方をしないと全てのタグが削除できません。
一度全てのタグを削除してから次の記述でタグを付与します。

-- ▼▼▼ ダイアログで入力した数値おきに処理する
	repeat with i from 1 to (count items of everyFiles) by (inputNum + 1)
		--display dialog i
		set targetFilesTxt to item i of everyFiles as Unicode text
		set processedFiles to POSIX path of targetFilesTxt
		
		-- ▼ダイアログで指定した色のタグを設定
		do shell script "xattr -w com.apple.metadata:_kMDItemUserTags '(" & chooseColorsArray & ")' " & processedFiles
	end repeat

count items of everyFiles ファイル数分の処理。by (inputNum + 1) いくつおきに処理するかの記述。
8行目で選択した色でタグを設定します。

仕様は上のソースコード内に記載してあります。
動いているところをYouTubeにアップしてあります。

まとめ

冒頭にも書きましたがAppleScriptを扱うのは実に14年ぶりになります。
すっかり書き方も忘れてしまい、いつも扱っているJavaScriptのような書き方をし「なんで動かないんだ???」など悩んだりしながらの検証でした。

タグは2013年にリリースされたOS X Mavericks(10.9)から実装されたものです。
以前はラベルという扱いになっていました。

AppleScriptでは set label index of selection to 1 など数値で色指定を行うシンプルな書き方でしたが、タグの扱いは上記のソースコードのようにShellScriptを実行するようになってます。
仕事でも扱う機会があると思うので、今後も必要に応じて検証していきたいと思います。

お断りとして、紹介しているソースコードはご自由に使用していただいても構いませんが、生じたトラブル、損害などについては、本サイト、紹介しているサイトさま共に、一切の責任を追わないものとします。

最後まで読んでくださりありがとうございました。

参考にしたサイト

つらいの飛んでけ さま

鳶嶋工房 さま

Zenn さま

関連記事
Pocket