問題をいくつかのステップに分けてみましょう。
まず、ファインダーからファイルを取得します。今のところ、フォルダが選択されていて、その囲まれたファイルにスクリプトを適用したいとします。
tell application "Finder"
set theFolder to the selection
set theFiles to every file of item 1 of theFolder
Finderの選択を取得すると、リスト、つまり項目1が表示されます。これにより、たとえば、複数のフォルダーを選択し、繰り返しループを使用してそれらを反復処理することにより、リストを広げることができます。
次に、すべてのファイルを調べたいので、関数を呼び出して、現在のファイルのファイル名を文字列として渡すループを設定しましょう。
repeat with aFile in theFiles
set originalName to the name of aFile
set newName to my threeDigitPrefix(originalName)
私たちが呼び出すサブルーチンは非常に単純なもので、ファイル名の文字列を分解してリストに格納することから始まります。
set AppleScript's text item delimiters to " "
set splitName to (every text item of originalName) as list
次に、ファイル名が数字で始まっていることを確認し、数字でない場合は関数から抜け出します。
try
first item of splitName as number
on error
return "FAILED" -- originalName does not start with a number
end try
次に、既存のプレフィックスを変数に割り当て、その長さをチェックして、ファイル名に追加する必要のあるゼロの数を決定します。
set thePrefix to the first item of splitName
if the length of thePrefix is 1 then
set thePrefix to "00" & thePrefix
else if the length of thePrefix is 2 then
set thePrefix to "0" & thePrefix
end if
次に、プレフィックスを分割されたファイル名を含むリストに戻し、それを再結合して、それを呼び出したループに戻します。
set the first item of splitName to thePrefix
return splitName as string
最後に、関数が失敗しなかったことを確認し、関数から取得した文字列でファイルの名前を変更します。
if newName is not "FAILED" then
set the name of aFile to newName
end if
これで完了です。すべてをまとめると、次のようになります。
tell application "Finder"
set theFolder to the selection
set theFiles to every file of item 1 of theFolder
repeat with aFile in theFiles
set originalName to the name of aFile
set newName to my threeDigitPrefix(originalName)
if newName is not "FAILED" then
set the name of aFile to newName
end if
end repeat
end tell
on threeDigitPrefix(originalName)
set AppleScript's text item delimiters to " "
set splitName to (every text item of originalName) as list
try
first item of splitName as number
on error
return "FAILED" -- originalName does not start with a number
end try
set thePrefix to the first item of splitName
if the length of thePrefix is 1 then
set thePrefix to "00" & thePrefix
else if the length of thePrefix is 2 then
set thePrefix to "0" & thePrefix
end if
set the first item of splitName to thePrefix
return splitName as string
end threeDigitPrefix