0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AppleScriptで効率的なファイル管理を実現:内容抽出と日付付与によるファイル名自動生成スクリプト

Last updated at Posted at 2024-09-23

下記のAppleScriptは、指定したフォルダ内に存在するファイル名から内容部分を抽出し、重複を除いたリストを生成します。ユーザーは既存の内容を選択するか、新しい内容を追加して、日付と組み合わせた新しいファイル名をクリップボードにコピーできます。特定のファイル命名規則に基づくファイル管理を効率化したい場合に便利です。

スクリプトの主な機能

  • 保存フォルダの設定: スクリプトが置かれたフォルダを対象フォルダとします。
  • ファイルリストの取得: フォルダ内のすべてのファイル名を取得します。
  • 内容部分の抽出: ファイル名から特定の規則(_区切り)で内容部分を抽出します。
  • 重複を除外したリストの作成: 抽出された内容から重複を除外し、リストを作成します。
  • 内容の選択または新規追加: 既存の内容を選ぶか、新しい内容を入力するオプションを提示します。
  • ファイル名の生成: 選択した内容と現在の日付を組み合わせて、拡張子なしのファイル名を生成します。
  • クリップボードへのコピー: 生成されたファイル名をクリップボードにコピーします。

サンプルコード

-- 保存フォルダを設定(スクリプトのフォルダを初期値に)
set scriptFilePath to (path to me)
set scriptFolderPath to (do shell script "dirname " & quoted form of POSIX path of (scriptFilePath as text))

-- ファイルリストを取得
set fileList to {}
tell application "Finder"
	set fileList to name of every file in (POSIX file scriptFolderPath as alias)
end tell

-- 既存ファイルの内容部分を抽出
set contentList to {}
repeat with aFile in fileList
	if aFile contains "_" then
		set fileParts to my split(aFile, "_")
		-- ファイル名の「内容」部分をリストに追加
		set contentList to contentList & item 1 of fileParts
	end if
end repeat

-- 重複を除いたリストを作成し、新規追加オプションを加える
set contentList to my removeDuplicates(contentList)
set contentList to contentList & {"新しい内容を追加"}

-- ダイアログで既存の値を選択 or 新規追加
set dialogResult to choose from list contentList with prompt "既存の内容を選択するか、新規内容を追加してください。"

if dialogResult is false then
	display dialog "処理がキャンセルされました。" buttons {"OK"}
	return
else if dialogResult as string is "新しい内容を追加" then
	-- 新しい内容を入力するダイアログを表示
	set newContentDialog to display dialog "新しい内容を入力してください:" default answer ""
	set newContent to text returned of newContentDialog
else
	-- 既存の内容を選択
	set newContent to dialogResult as string
end if

-- 日付部分を生成
set currentDate to do shell script "date +'%Y%m%d'"

-- 新しいファイル名(拡張子なし)を生成
set newFileName to newContent & "_" & currentDate

-- クリップボードに拡張子なしのファイル名をコピー
set the clipboard to newFileName

-- 結果を表示
display dialog "新しいファイル名 '" & newFileName & "' がクリップボードに保存されました。" buttons {"OK"}

-- ファイル名の内容部分を抽出する関数
on split(theString, delimiter)
	set oldDelimiters to AppleScript's text item delimiters
	set AppleScript's text item delimiters to delimiter
	set theArray to every text item of theString
	set AppleScript's text item delimiters to oldDelimiters
	return theArray
end split

-- リストから重複を除く関数
on removeDuplicates(theList)
	set newList to {}
	repeat with i from 1 to count of theList
		set anItem to item i of theList
		if anItem is not in newList then
			set end of newList to anItem
		end if
	end repeat
	return newList
end removeDuplicates

スクリプトの使用方法

  1. このAppleScriptをスクリプトエディタにコピーし、適切な名前で保存します。
  2. 対象となるフォルダにあるファイル名の命名規則に基づき、新しいファイル名を生成します。ファイル名は、内容部分_日付という形式で作成され、クリップボードにコピーされます。
  3. 生成されたファイル名は、他のアプリケーションで貼り付けて使用できます。

たとえば、report_20230923.txtというファイルがフォルダ内にある場合、このスクリプトはreportを内容部分として抽出し、ユーザーが新しいファイル名を生成すると、report_20230924のような形式のファイル名がクリップボードに保存されます。

拡張のアイデア

  • ファイルの自動リネーム: クリップボードにコピーするだけでなく、実際にファイル名を変更する機能を追加できます。
  • カスタム日付形式の対応: 日付の形式をカスタマイズするオプションを追加し、YYYY/MM/DDなどの形式に対応できます。

このスクリプトを利用することで、日常的なファイル管理の効率化が期待できます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?