tetsunosukeのnotebook

tetsunosukeのメモです

はじめてのAppleScript

文法とか眺めつつ・・・

友達に頼まれた、あるフォルダにあるファイルを指定個数ずつ別のフォルダにコピーします。コピー処理がえらい遅い気がするのだがfinder経由するとこんなもんなん??

(* 一つのフォルダに何個までファイルをコピーするかを定義します*)
set max to 870 as integer


(* コピーもと、コピー先を指定させる*)
set myFol to choose folder with prompt "コピー元フォルダを選択"
set myFol to myFol as string
set outFol to choose folder with prompt "コピー先フォルダを選択"
set outFol to outFol as string
set cnt to 0 as integer


(*
選択されたフォルダに対してファイルを列挙し、
divideを呼び出してファイルを振り分ける
*)
repeat with myFile in list folder myFol without invisibles
	set this_item to (myFol & myFile) as alias
	(* 現在の処理済みファイル数に応じてフォルダ名を作成*)
	set new_folder_name to (cnt) div max
	set new_folder_name to new_folder_name + 1
	(* 連番の都合で10に満たないものは"01"のようにする*)
	if new_folder_name < 10 then
		set new_folder_name to "0" & new_folder_name
	end if
	
	(* 指定したフォルダ内に指定した個数が存在しなければ、
	 新規のフォルダを作成する *)
	if cnt mod max is 0 then
		log "create new folder: " & new_folder_name
		tell application "Finder"
			make new folder at outFol with properties {name:new_folder_name}
		end tell
	end if
	my divide(this_item, outFol & new_folder_name)
	set cnt to cnt + 1
end repeat

display dialog "作業完了しました"


on divide(name, outFol)
	(*log "FILE=" & name*)
	tell application "Finder"
		duplicate name to outFol
	end tell
end divide